【问题标题】:pandas to_csv argument float_format to a percentagepandas to_csv 参数 float_format 到百分比
【发布时间】:2019-05-06 07:52:52
【问题描述】:

我正在尝试输出 pandas 数据框,但我希望它以百分比形式输出浮点数。我已经对此进行了大量搜索,我可以让它们在输出中显示为浮点数,就像我想要使用的那样

pd.options.display.float_format = '{:,.2%}'.format

但我想要做的是完全相同的事情,除非我使用 .to_csv 方法导出到 .csv。

示例代码:

df2 = pd.DataFrame(data = {'Index': ['One', 'Two'], 'col1': [.1, .2], 'col2': [.3, .4], 'col3': [1, 7]})
df2.set_index('Index')

df:

    col1    col2    col3
Index           
One 0.1     0.3     1
Two 0.2     0.4     7

col1 和 col2 是 float64,col3 是整数

我想使用以下(当然也可以是类似的):

dfs.to_csv("filelocation and name.csv", float_format = '{:.2%}'.format)

输出到一个看起来像这样的 .csv:

    col1    col2    col3
Index           
One 10%     30%     1
Two 20%     40%     7

任何帮助将不胜感激。我遇到了从“TypeError:不支持的格式字符串传递给 numpy.ndarray._ _ format _ _”到“KeyError:'%'”以及介于两者之间的错误。

【问题讨论】:

  • 似乎一种明确的方法是在导出之前对两列进行简单映射,但我真的希望能够在 to_csv 方法中使用 float_format 标记。以df['col1'] = df['col1'].map('${:,.2%}'.format) 为例。

标签: python pandas numpy floating-point export-to-csv


【解决方案1】:

您可以访问float_format 来格式化csv 文件中的输出,但这只是一个string,这意味着您可以格式化列,但不能对它们进行操作。例如

with open('foo.csv', 'w') as f:
    df2.to_csv(f, index = False, header = True, float_format = '%.2f%%')

将创建此输出

Index,col1,col2,col3
One,0.10%,0.30%,1
Two,0.20%,0.40%,7

如果您想更改值,我建议您在输出之前更新数据框

df2 = pandas.DataFrame(data = {'Index': ['One', 'Two'], 'col1': [.1, .2], 'col2': [.3, .4], 'col3': [1, 7]})
df2.set_index('Index')

df2['col1'] *= 100
df2['col2'] *= 100

with open('foo.csv', 'w') as f:
    df2.to_csv(f, index = False, header = True, float_format = '%.2f%%')

【讨论】:

  • 这使得float_format 标签的实际用途更加清晰。如果我使用您建议的方法,那会将值保存为字符串,对吗?即“10%”
  • @JustinG 是的,它会将其保存为字符串,例如10.00%,如果你想要10%,你可以试试'%.0f%%'
猜你喜欢
  • 2015-10-13
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 2022-06-13
  • 1970-01-01
  • 2018-05-21
  • 2016-09-06
相关资源
最近更新 更多