【问题标题】:Format a number with commas to separate thousands in Python用逗号格式化数字以在 Python 中分隔千位
【发布时间】:2017-08-23 11:39:11
【问题描述】:

我有一个大型数据框,其中有一列名为Lead Rev。此列是数字字段,例如(100000 或 5000 等)。我想知道如何格式化这些数字以将逗号显示为千位分隔符。该数据集有超过 200,000 行。

是不是类似于:'{:,}'.format('Lead Rev')

这给出了这个错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-182-5fe9c827d80b> in <module>()
----> 1 '{:,}'.format('Lead Rev')

ValueError: Cannot specify ',' or '_' with 's'.

【问题讨论】:

标签: python python-3.x pandas jupyter-notebook number-formatting


【解决方案1】:

要让您的所有浮点数在 pandas 0.23 到 0.25 版本中默认显示逗号分隔符,请设置以下内容:

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

https://pandas.pydata.org/pandas-docs/version/0.23.4/options.html

在 pandas 1.0 版中,这在某些情况下会导致一些奇怪的格式。

【讨论】:

  • 在逗号后添加 ".2f" 将只显示 2 位数字,而不是一些奇怪的浮点型数字。 pd.options.display.float_format = '{:,.2f}'.format
【解决方案2】:

您可以使用 apply() 来获得所需的结果。这也适用于浮动

import pandas as pd

series1 = pd.Series({'Value': 353254})
series2 = pd.Series({'Value': 54464.43})
series3 = pd.Series({'Value': 6381763761})

df = pd.DataFrame([series1, series2, series3])
print(df.head())

         Value
0  3.532540e+05
1  5.446443e+04
2  6.381764e+09

df['Value'] = df.apply(lambda x: "{:,}".format(x['Value']), axis=1)
print(df.head())

             Value
0        353,254.0
1        54,464.43
2  6,381,763,761.0

【讨论】:

  • df['Value'] = df['Value'].apply(lambda x: "{:,}".format(x)有何不同?
  • 如果你只想有两位小数怎么办?您如何合并%.2f 信息?
  • 这个答案具有误导性,因为它导致列是字符串而不是浮点数。
  • 你也可以完全去掉 lambda。:df['Value'] = df['Value'].apply('{:,}'.format) 因为 str.format 接受一个参数。
【解决方案3】:

df.head().style.format("{:,.0f}")所有列

df.head().style.format({"col1": "{:,.0f}", "col2": "{:,.0f}"})每列

https://pbpython.com/styling-pandas.html

【讨论】:

  • 这个答案不会改变值。它严格用于演示。完美的。谢谢你。 - E
  • 仅供参考,这需要 jinja2:ImportError: Missing optional dependency 'jinja2'. DataFrame.style requires jinja2. Use pip or conda to install jinja2.
  • @Henry - 您使用的是哪个 IDE/Notebook 客户端?对于标准的 Jupyter Lab 或 Jupyter Notebook 安装和pip install pandas,这是开箱即用的。
【解决方案4】:

最简单的方法是

df = df.style.format('{:,}')

【讨论】:

    【解决方案5】:

    可能是最简洁的解决方案:df[column].map('{:,d}'.format)

    【讨论】:

      【解决方案6】:

      你可以使用apply或者stack方法

      df.apply(lambda x: x.str.replace(',','.'))
      df.stack().str.replace(',','.').unstack()
      

      【讨论】:

        【解决方案7】:

        , 等分组选项仅支持数字表示类型。您需要指定数字表示类型。阅读您的options

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-13
          • 2014-09-10
          • 1970-01-01
          • 2015-06-10
          • 1970-01-01
          • 1970-01-01
          • 2011-03-12
          相关资源
          最近更新 更多