![使用 pandas 读取 CSV,其中值用双引号括起来,并且值在列中有逗号](https://linux22.com/image/1523807/%E4%BD%BF%E7%94%A8%20pandas%20%E8%AF%BB%E5%8F%96%20CSV%EF%BC%8C%E5%85%B6%E4%B8%AD%E5%80%BC%E7%94%A8%E5%8F%8C%E5%BC%95%E5%8F%B7%E6%8B%AC%E8%B5%B7%E6%9D%A5%EF%BC%8C%E5%B9%B6%E4%B8%94%E5%80%BC%E5%9C%A8%E5%88%97%E4%B8%AD%E6%9C%89%E9%80%97%E5%8F%B7.png)
我需要读取以下类型的 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")