如何将pandas数据框以不同格式转换为CSV格式?

3

Pandas的DataFrame文本输出函数存在以下问题:

  • to_csv()不支持to_string()中的'formatters'参数。我需要为每个列使用不同的格式。
  • to_string()不支持分隔符。

目前我的解决方式是:

我按照新的Python格式化方式生成一个格式字符串列表,例如['{8.1f}','{9.3f}',...,],然后使用这个 hack 方法:

f.write(', '.join(fmt).format(*data)+'\r\n')

有没有办法让pandas为我完成一些黑客工作,还是这需要一个功能请求,而我已经完成了所有的工作?;)
2个回答

3

np.savetxt 可以实现这一点(通过提供 fmt 参数,该参数可以是一个 list),但这意味着列名必须单独写入(使用 header 参数):

np.savetxt('temp.csv', df.values, fmt=['%8.1f','%9.3f','%8.1f','%9.3f','%8.1f'], 
           delimiter=',', header='     '+'     ,'.join(df.columns), comments='')

1
你可以尝试这个:
import pandas as pd

df = pd.DataFrame({
    'a': [-8.114445, 888.303217, 80],
    'b': ['d', 'gg5g', '9ghhhh'],
    'c': [14.34e+4,12.1e-1,1e-5],
    'd': [34,65373,-176576]}
)

df.to_string("temp.txt",
            formatters={
                "a": "{:6,.2f}".format,
                "b": "{:<}".format,
                "c": "{:9,.5e}".format,
                "d": "{:7d}".format
                }, index=False
            )

"temp.txt"的内容:

     a      b           c       d
 -8.11      d 1.43400e+05      34
888.30   gg5g 1.21000e+00   65373
 80.00 9ghhhh 1.00000e-05 -176576

是的,这在2014年是不可能的。:) 很棒,pandas 的发展真是令人赞叹。 - K.-Michael Aye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接