我目前正在尝试读取一个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"