Python Pandas -在写入_csv时使用多字符分隔符

cvxl0en2  于 2023-09-27  发布在  Python
关注(0)|答案(3)|浏览(209)

pandas to_csv函数似乎只允许单个字符分隔符/分隔符。
是否有某种方法可以允许使用字符串,如“::”或“%%”?
我试过:

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

得到:

TypeError: "delimiter" must be a 1-character string
ippsafx7

ippsafx71#

使用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')
gmol1639

gmol16392#

想想这行a::b::c‘对标准CSV工具意味着什么:a、空列、b、空列和c。即使在引用或转义更复杂的情况下:"abc::def"::2表示abc::def、空列和2。
因此,您所要做的就是在每一列之间添加一个空列,然后使用:作为分隔符,输出将几乎是您想要的。
我说“几乎”是因为Pandas要引用或转义单冒号。根据您使用的方言选项以及您试图与之交互的工具,这可能是也可能不是问题。不必要的引号通常不是问题(除非你要求使用QUOTE_ALL,因为这样你的列将被:"":分隔,所以希望你不需要那个方言选项),但不必要的转义可能是问题(例如,你可能最终会把字符串中的每个:都变成\:或其他东西)。所以你必须小心选择。但它将工作的基本“报价需要,与大多数标准的其他选项”设置。

ztyzrc3y

ztyzrc3y3#

目前我被困在一个旧版本的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="__")

然而,to_numpy()在我拥有的Pandas版本中不受支持。
所以,我的解决方案是生成一个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()

相关问题