如何在 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() 中设置自定义分隔符?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ListView 和 AlertDialog 中设置自定义字体?
根据另一行的值是不是已被索引,在 pandas 中设置行索引