pandas to_csv函数似乎只允许单个字符分隔符/分隔符。是否有某种方法可以允许使用字符串,如“::”或“%%”?我试过:
df.to_csv(local_file, sep = '::', header=None, index=False)
得到:
TypeError: "delimiter" must be a 1-character string
ippsafx71#
使用numpy.savetxt。示例如下:
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')
gmol16392#
想想这行a::b::c‘对标准CSV工具意味着什么:a、空列、b、空列和c。即使在引用或转义更复杂的情况下:"abc::def"::2表示abc::def、空列和2。因此,您所要做的就是在每一列之间添加一个空列,然后使用:作为分隔符,输出将几乎是您想要的。我说“几乎”是因为Pandas要引用或转义单冒号。根据您使用的方言选项以及您试图与之交互的工具,这可能是也可能不是问题。不必要的引号通常不是问题(除非你要求使用QUOTE_ALL,因为这样你的列将被:"":分隔,所以希望你不需要那个方言选项),但不必要的转义可能是问题(例如,你可能最终会把字符串中的每个:都变成\:或其他东西)。所以你必须小心选择。但它将工作的基本“报价需要,与大多数标准的其他选项”设置。
a::b::c‘
a
b
c
"abc::def"::2
abc::def
:
QUOTE_ALL
:"":
\:
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()
3条答案
按热度按时间ippsafx71#
使用
numpy.savetxt
。示例如下:
gmol16392#
想想这行
a::b::c‘
对标准CSV工具意味着什么:a
、空列、b
、空列和c
。即使在引用或转义更复杂的情况下:"abc::def"::2
表示abc::def
、空列和2。因此,您所要做的就是在每一列之间添加一个空列,然后使用
:
作为分隔符,输出将几乎是您想要的。我说“几乎”是因为Pandas要引用或转义单冒号。根据您使用的方言选项以及您试图与之交互的工具,这可能是也可能不是问题。不必要的引号通常不是问题(除非你要求使用
QUOTE_ALL
,因为这样你的列将被:"":
分隔,所以希望你不需要那个方言选项),但不必要的转义可能是问题(例如,你可能最终会把字符串中的每个:
都变成\:
或其他东西)。所以你必须小心选择。但它将工作的基本“报价需要,与大多数标准的其他选项”设置。ztyzrc3y3#
目前我被困在一个旧版本的Pandas。我的任务是读取带有“__”分隔符的csv,清理它以删除个人识别信息,并将结果写入一个新文件。我需要结果具有相同的两个字符分隔符。
我的首选解决方案是转换为numpy并保存,如下所示:
然而,to_numpy()在我拥有的Pandas版本中不受支持。
所以,我的解决方案是生成一个csv,用“}”作为临时分隔符,将其保存到一个变量,进行字符串替换,然后自己编写文件: