【问题标题】:How to set a custom separator in pandas to_csv()?如何在 pandas to_csv() 中设置自定义分隔符?
【发布时间】:2017-09-05 13:45:59
【问题描述】:

从文档中我知道,为了保存为 .csv 文件,可以简单地执行以下操作:

df.to_csv(sep = ';')

但是,我想使用我的自定义分隔符,例如::::。如何将::: 设置为分隔符?我试图:

df.to_csv(sep = ':::')

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

我也试过:df.to_csv('../data.csv', sep='\s*\:::', index=False),得到了同样的结果。因此,如何设置自己的分隔符?

更新

因为我的数据框中有|,所以我不能使用这样的字符作为分隔符。我试图删除它:

df.replace('\b|\b', '-', regex = True)

但是,它没有奏效。关于如何删除它的任何替代方法?。

【问题讨论】:

  • 请记住,如果内存服务正确,这实际上违反了 csv 规范...
  • 为了不破坏规范,您可能会选择比 | 更不常见的东西,如果您不处理非英语数据,请改用 È 之类的东西
  • @not_a_robot 请检查我的更新。感谢您的帮助

标签: python python-3.x csv pandas


【解决方案1】:

这是一篇旧帖子,但在谷歌搜索如何将 Dataframe 导出到 csv 时,我似乎总是在这里。

虽然你不能直接用 Pandas 做,但你可以用 Numpy 做。

由于 Pandas 需要 Numpy,因此您不会增加包大小。

要做你想做的事,你可以简单地做:

import numpy as np
np.savetxt('out.csv', my_df, delimiter=':::')

Numpy 提供了更强大的 api 来保存 csv 文件。您甚至可以使用以下命令指定不同的分隔符:

import numpy as np
np.savetxt('out.csv', my_df, fmt=['%.2f:::', '%f', '%s'])

您可以找到所有可能的选项in the docs

【讨论】:

  • IMO,这个答案缺少重要的细节。见the answer by Kumar Abhisek
  • 这个答案缺少哪些细节?我很高兴改进它。
【解决方案2】:

显然 Pandas 似乎不允许这种行为。

但是,如果您绝对想要“:::”。为什么不使用“|”等不常见字符导出数据框然后打开文件并替换“|”通过“:::”。

这是我想达到你想要的结果的唯一解决方案。

【讨论】:

  • 问题是我的数据框中有|
  • 找到一个你没有的角色。试试“~”或“µ”,也许是“¤”。
  • @johndoe,包含| 的值应被引用,例如:foo|"bar|baz"
  • 或者如何从我的df 中删除它们?
  • 我试过了:df.replace('\b|\b', '-', regex = True)
【解决方案3】:

毕竟,我做到了:

df['Col'] = df['Col'].str.replace('|', ':')

为了从列中删除它。然后我修复了一个不同的字符来分隔我的 df。

【讨论】:

    【解决方案4】:

    试试这个

    import pandas as pd
    import numpy as np
    
    my_numpy = pandas_df.to_numpy()
    np.savetxt('out.csv', my_numpy,fmt='%s', delimiter=':::')
    

    【讨论】:

      【解决方案5】:

      Zipa 帮助我解决了使用连续空格作为分隔符here 的问题:

      这可能是一种解决方法:

        myCsv = df.astype(str).apply(lambda x: '   '.join(x), axis=1)
        myCsv.rename('   '.join(df.columns)).to_csv(file, header=True, index=False)
      

      也许根据他的回答,试试:

      myCsv = df.astype(str).apply(lambda x: ':::'.join(x), axis=1)
      myCsv.rename(':::'.join(df.columns)).to_csv(file, header=True,index=False)
      

      如果列名是字符串,它确实对我有用

      【讨论】:

        【解决方案6】:

        熊猫版本 0.24.2。将 Jonathan Dekhtiar 的评论作为答案。用 α 之类的特殊字符保存 csv 就像一个魅力

        【讨论】:

          最近更新 更多