使用 pandas 读取 CSV,其中值用双引号括起来,并且值在列中有逗号

使用 pandas 读取 CSV,其中值用双引号括起来,并且值在列中有逗号

我需要读取以下类型的 python pandas 中的文件

"column1","column2","column3","column4"
"value1","value,1","value2","value3"
"value5","value6","value7","value8"
"value32","value21","value,31","value,44"

我尝试使用

file1 = pd.read_csv('sample.txt',sep=',\s+',skipinitialspace=True,quoting=csv.QUOTE_ALL,engine=python)

它说的是类似ValueErro(预期某些行有其他内容)不完全是

我需要读取这种类型的大型 CSV 文件并将其加载到数据框中。我应该做哪些更改才能正确读取它。

答案1

无需预处理 csv 文件,只需使用引擎类型 python :

dataset = pd.read_csv('sample.csv', sep=',', engine='python')

答案2

在 python pandas 中使用sep=',\s*'而不是sep=',\s+',它将使每个逗号后的空格成为可选的:

file1 = pd.read_csv('sample.txt',sep=',\s*',skipinitialspace=True,quoting=csv.QUOTE_ALL,engine='python')

双引号内的逗号是可以的,这是 rfc4180 标准允许的。
至于" "数据值内部(例如“value”“13”) - 您需要在处理之前清理源文件。如果双引号保持为“”,则不应该有问题,因为它符合 CSV 标准,它调用转义双引号,但如果双引号之间有空格,则需要清理它

使用:

sed -r 's/\"\s+\"/\"\"/g' src.csv >cleared.csv 

在将 CSV 提供给 pandas 之前。它将删除引号之间的空格或运行

sed -r 's/\"\s+\"//g' src.csv >cleared.csv 

完全删除内部引号。

答案3

quotechar='"'您所需要的是有助于忽略引号内的分隔符的参数。

file1 = pd.read_csv('sample.txt',sep=',\s+', quotechar='"')

答案4

我“认为”这两个命令,在文件名之间使用单引号和双引号,应该以相同的方式工作(或者不工作?):

pd.read_csv('文件名.csv')

或这个

pd.read_csv("文件名.csv")

相关内容