用逗号格式化数字以在 Python 中分隔千位

Posted

技术标签:

【中文标题】用逗号格式化数字以在 Python 中分隔千位【英文标题】:Format a number with commas to separate thousands in 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'.

【问题讨论】:

当您说“数字”时,它们是 int、float 还是两者兼而有之?此外,format spec ':,' doesn't contain any type '%'/'f'/etc., so it will default to 's' and try to apply it to all types。 supposed 可以工作,但如果不行,您将不得不退回到特定于列、特定于类型的格式说明符/自定义格式化程序。报告问题时说明哪个版本的熊猫很有帮助。 【参考方案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。

【讨论】:

以上是关于用逗号格式化数字以在 Python 中分隔千位的主要内容,如果未能解决你的问题,请参考以下文章

java 有千位分隔逗号的数字格式化输出 数字前补0输出

Highcharts:用逗号格式化所有数字?

如何格式化带有千位分隔符和括号中的负数的数据透视表数字?

PHP数字格式不带逗号

读取所有列合并为一个的csv文件:千位逗号问题

新手 js 金额千位格式化函数 有几个问题 高手求解 急用!!!用千位数字举个例子