使用带有双引号的值和值在列中有逗号的熊猫读取CSV

Aja*_*K S 7 python csv

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

"column1","column2","column3","column4"
"value1","value,1","value2","value3"
"value5","value6","value7","value8"
"value32","value21","value,31","value,44"
Run Code Online (Sandbox Code Playgroud)

我尝试使用

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

它说的是类似ValueErro(预计有些行有别的东西),不完全是

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

Ale*_*lex 1

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

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

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

使用:

sed -r 's/\"\s+\"/\"\"/g' src.csv >cleared.csv 
Run Code Online (Sandbox Code Playgroud)

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

sed -r 's/\"\s+\"//g' src.csv >cleared.csv 
Run Code Online (Sandbox Code Playgroud)

完全删除内部引号。