如何在 pandas to_csv() 中设置自定义分隔符?

Posted

技术标签:

【中文标题】如何在 pandas to_csv() 中设置自定义分隔符?【英文标题】:How to set a custom separator in 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)

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

【问题讨论】:

这是您要找的吗? Use Multiple Character Delimiter in Python Pandas to_csv 请记住,如果内存服务正确,这实际上违反了 csv 规范... 为了不破坏规范,您可能会选择比 | 更不常见的东西,如果您不处理非英语数据,请改用 È 之类的东西 @not_a_robot 请检查我的更新。感谢您的帮助 【参考方案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 就像一个魅力

【讨论】:

以上是关于如何在 pandas to_csv() 中设置自定义分隔符?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 自定义声明 IOS 和 swift

在 pandas MultiIndex 系列中设置值

如何在 ListView 和 AlertDialog 中设置自定义字体?

根据另一行的值是不是已被索引,在 pandas 中设置行索引

Pandas:用于在 DataFrame 中设置值的三元条件运算符

python 在Jupyter Notebook中设置pandas数据帧的宽度