Pandas csv不理解双引号内的空格



我目前正在尝试读取一个csv文件,使用Pandas数据帧添加/删除/重命名一些列,然后将其写回同一文件。然而,我使用的一些文件包含的记录如下:

Column 1,Column 2,Column 3,Column 4
123," ",ABCD,"This, that, and this"

我能够成功地让熊猫理解";这个,那个,还有这个";并用引号和逗号将其写回csv。但不幸的是,我似乎找不到被引号包围的空位";。它会这样写回来:

Column 1,Column 2,Column 3,Column 4
123, ,ABC,"This, that, and this"

我的读数看起来像:

f = pd.read_csv((mypath + file), skipinitialspace=True, quotechar='"')

我的文字看起来像:

f.to_csv((mypath + file), index=False)

它仍然是一个有效的CSV,空格周围没有引号。只有包含分隔符(逗号(的字段才需要加引号。

阅读时不需要skipinitalspace=True。只有当CSV看起来像A, B, C, D而不是A,B,C,D时才需要这样做。

quotechar参数也不需要,因为"是默认值。

你能用pandas做的最好的事情就是报价,如果你需要的话:

import pandas as pd
import csv
f = pd.read_csv('sample.csv')
f.to_csv('out.csv',index=False, quoting=csv.QUOTE_ALL)

给定:sample.csv

Column 1,Column 2,Column 3,Column 4
123," ",ABCD,"This, that, and this"

结果:out.csv

"Column 1","Column 2","Column 3","Column 4"
"123"," ","ABCD","This, that, and this"

据我所知,您可以在to_csv中使用引号来引用所有字符串

import csv
import pandas as pd
f = pd.read_csv(('test.csv'), skipinitialspace=True, quotechar='"')
f.to_csv(('test2.csv'), quoting=csv.QUOTE_NONNUMERIC, index=False)

和类似的输出

"Column 1","Column 2","Column 3","Column 4"
123," ","ABCD","This, that, and this"

或者您可以用"替换空白"'但是输出将包含类似于"3"的三引号"quot"quot">

f = pd.read_csv(('test.csv'), skipinitialspace=True, quotechar='"')
f["Column 2"] = f["Column 2"].replace(r'^s*$', '" "', regex=True)
f.to_csv(('test2.csv'), index=False)

和类似的输出

Column 1,Column 2,Column 3,Column 4
123,""" """,ABCD,"This, that, and this"

最新更新