用逗号格式化数字以在 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 中分隔千位的主要内容,如果未能解决你的问题,请参考以下文章