使用逗号将数字格式化,以分隔千位。

66

我有一个大型数据框,其中有一列名为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还是两者兼有?另外,格式规范'{:,}'不包含任何类型'%''f'/'等等,因此它将默认为's'并尝试对所有类型进行应用。这应该可以工作,但如果不行,您必须返回到特定列、特定类型的格式规范符/自定义格式化程序。在报告问题时指出pandas的哪个版本会有所帮助。 - smci
这个回答解决了你的问题吗?如何在pandas中禁止科学计数法显示? - Josiah Yoder
这个问题并不完全是我刚刚投票要关闭的那个问题的重复,但它是该主题的一个子集,并且已经在那个得到最多赞同票的问题中得到了完整回答。 - Josiah Yoder
7个回答

75

18
在逗号后添加“.2f”将仅显示两位数字,而不是一些奇怪的浮点数格式数字。 pd.options.display.float_format = '{:,.2f}'.format - Will Wu
2
似乎对于 int 类型不起作用。 - Sean.H
请将第一个点赞的评论包含在您的回答中。当包含千位数时,.2f是一个非常好的默认值。 - Josiah Yoder

45

4
这个回答不会改变价值观,只是为了表述更加完美。非常好,谢谢。- E - Edmund's Echo
3
注意,这需要jinja2:ImportError: Missing optional dependency 'jinja2'。DataFrame.style需要jinja2。请使用pip或conda安装jinja2。 - Henry Henrinson
@Henry - 你使用哪个IDE/Notebook客户端?对于标准的Jupyter Lab或Jupyter Notebook安装和pip install pandas,这是开箱即用的。 - Ran Feldesh

43
你可以使用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

3
df['Value'] = df['Value'].apply(lambda x: "{:,}".format(x))的区别在哪里? - ytu
如果您只想保留两位小数,该怎么办?您如何使用“%.2f”信息? - FaCoffee
3
这个答案具有误导性,因为它会得到一个字符串类型的列,而不是浮点数类型。 - Nick Morgan
2
你也可以完全将lambda去掉:df['Value'] = df['Value'].apply('{:,}'.format),因为str.format只需要一个参数。 - Evan V
如何使其也适用于 int - Ian CT

20

最简单的方法是

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

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

5

0

你可以使用 apply 或 stack 方法

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

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