【问题标题】:Python Pandas - use Multiple Character Delimiter when writing to_csvPython Pandas - 写入 to_csv 时使用多个字符分隔符
【发布时间】:2018-12-22 00:45:23
【问题描述】:

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

有没有办法允许使用字符串,例如“::”或“%%”?

我试过了:

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

得到:

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

【问题讨论】:

  • 您可以将所需分隔符的单个字符附加到每个元素,然后将单个字符传递给分隔符,但如果您打算将其读回pandas,那么您将遇到同样的困难
  • @EdChum 好主意.. 将单个字符附加到 DF 中的每个字段的命令是什么(它有 100 列和 10000 行)。我猜最后一列不能有尾随字符(因为是最后一列)。谢谢!
  • 你还有其他需要这个的工具吗?因为大多数电子表格程序、Python 脚本、R 脚本等都不会像 Pandas 那样识别格式。
  • 将第一个 : 附加到每个字段是行不通的,因为这只是保证每个字段都会被引用或转义,所以你会得到类似 :":" 的东西,或者最佳\::。 (即使你想用方言参数强制后者,它仍然会转义它在值中间看到的每个冒号,而不仅仅是双冒号。)
  • ftw,pandas 现在支持多字符分隔符。但是,如果该分隔符出现在引用的文本中,它将被拆分并丢弃在一行中检测到的真实字段数:(

标签: python csv dataframe delimiter


【解决方案1】:

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

【讨论】:

  • 如果你已经在使用数据帧,你可以简化它,甚至包括标题,假设 df = pandas.Dataframe: numpy.savetxt(csv_filepath, df, delimiter=csv_file_delimeter, header=csv_file_delimeter.join(df.columns.values), fmt='%s', comments='', encoding=None) (注意 cmets='' 是必需的,否则它会自动为标题前的注释符号)
  • 感谢@KtMack 提供有关列标题的详细信息...在这里使用 join 感觉很奇怪,但效果很好。
【解决方案2】:

想一想a::b::c‘ 这一行对于标准 CSV 工具的含义:a、空列、b、空列和 c。即使在使用引用或转义的更复杂的情况下:"abc::def"::2 表示 abc::def、空列和 2。

所以,你所要做的就是在每列之间添加一个空列,然后使用:作为分隔符,输出几乎就是你想要的。

我说“几乎”是因为 Pandas 会引用或转义单冒号。根据您使用的方言选项以及您尝试与之交互的工具,这可能是也可能不是问题。不必要的引用通常不是问题(除非您要求QUOTE_ALL,因为那样您的列将由:"": 分隔,所以希望您不需要该方言选项),但可能是不必要的转义(例如,您可能最终将字符串中的每个: 变成\: 或其他东西)。所以你必须小心选择。但它适用于基本的“根据需要报价,主要是标准的其他选项”设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 2017-10-25
    • 2018-10-08
    相关资源
    最近更新 更多