Python Pandas - 写入 to_csv 时使用多个字符分隔符

问题描述 投票:0回答:3

pandas to_csv 函数似乎只允许单个字符分隔符/分隔符。

是否有某种方法允许使用“::”或“%%”等字符串代替?

我试过:

df.to_csv(local_file,  sep = '::', header=None, index=False)

并得到:

TypeError: "delimiter" must be a 1-character string
python csv dataframe delimiter
3个回答
4
投票

使用numpy-savetxt

例如:

np.savetxt(file.csv, np.char.decode(chunk_data.values.astype(np.bytes_), 'UTF-8'), delimiter='~|', fmt='%s',encoding=None)

np.savetxt(file.dat, chunk_data.values, delimiter='~|', fmt='%s',encoding='utf-8')

0
投票

想想这一行

a::b::c‘
对于标准 CSV 工具意味着什么:
a
、空列、
b
、空列和
c
。即使在使用引用或转义的更复杂的情况下:
"abc::def"::2
表示
abc::def
、空列和 2.

因此,您所要做的就是在每列之间添加一个空列,然后使用

:
作为分隔符,输出将几乎是您想要的。

我说“几乎”是因为 Pandas 将引用或转义单个冒号。根据您使用的方言选项以及您尝试与之交互的工具,这可能会或可能不会成为问题。不必要的引用通常不是问题(除非您要求

QUOTE_ALL
,因为这样您的列将被
:"":
分隔,所以希望您不需要该方言选项),但不必要的转义可能是(例如,您可能最终字符串中的每个
:
都变成了
\:
之类的东西)。所以你必须小心选择。但它适用于基本的“根据需要报价,以及大多数标准的其他选项”设置。


0
投票

目前我还停留在旧版本的 pandas 上。我正在读取带有“__”分隔符的 csv,对其进行清理以删除个人识别信息,然后使用结果写入一个新文件。

我的首选解决方案是转换为 numpy 并保存,如下所示:

df = pandas.read_csv("patient_patient-final.txt", sep="__", engine="python")

# remove personal identifying info from dataframe

massaged = df.drop(['paternal_last', 'maternal_last', 'first', 'middle', 'suffix', 'prefix', 'street1', 'street2', 'phone1', 'phone2', 'email', 'emergencyfullname', 'emergencyphone', 'emergencyemail', 'curp', 'oldid'], axis=1)
np_data = massaged.to_numpy()
np.savetxt("patient_massaged.txt", np_data, fmt="%s", delimiter="__")

但是,我的 Pandas 版本不支持 to_numpy() 。

所以,我的解决方法是生成一个带有“}”作为临时分隔符的 csv,将其保存到变量中,进行字符串替换,然后自己编写文件:

df = pandas.read_csv("patient_patient-final.txt", sep="__", engine="python")

# remove personal identifying info from dataframe

massaged = df.drop(['paternal_last', 'maternal_last', 'first', 'middle', 'suffix', 'prefix', 'street1', 'street2', 'phone1', 'phone2', 'email', 'emergencyfullname', 'emergencyphone', 'emergencyemail', 'curp', 'oldid'], axis=1)

x = massaged.to_csv(sep="}", header=False, index=False)
x = x.replace("}", "__")

f=open("patient_massaged.txt", "w")
f.write(x)
f.close()
© www.soinside.com 2019 - 2024. All rights reserved.