如何在pandas中为数字添加千位分隔符

13
假设我有一个pandas数据框,想要给所有数字(包括整数和浮点数)添加千位分隔符,有什么简单快捷的方法可以做到吗?
6个回答

9

在使用,格式化数字时,你可以直接使用'{:,}'.format

n = 10000
print '{:,}'.format(n)
n = 1000.1
print '{:,}'.format(n)

在pandas中,您可以使用formatters参数来格式化to_html,如此处所讨论的那样。
num_format = lambda x: '{:,}'.format(x)
def build_formatters(df, format):
    return {
        column:format 
        for column, dtype in df.dtypes.items()
        if dtype in [ np.dtype('int64'), np.dtype('float64') ] 
    }
formatters = build_formatters(data_frame, num_format)
data_frame.to_html(formatters=formatters)

在stackoverflow上已经讨论了很多关于添加千位分隔符的问题。您可以在这里这里阅读。


1
它不能处理包含整数的数据框。只适用于浮点数。 - Ranadip Dutta

6
假设您只想显示(或呈现为HTML)带有千位分隔符的浮点数/整数,您可以使用styling,该功能在版本0.17.1中添加:
import pandas as pd
df = pd.DataFrame({'int': [1200, 320], 'flt': [5300.57, 12000000.23]})

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

使用Styler的渲染方法,可以将此输出呈现为html。

使用pandas 2.1.0和Pycharm Pro,这对浮点数有效,但对于int32和pd.Int64Dtype()无效。 - undefined

6

使用Series.mapSeries.apply方法,参考这个解决方案

df['col'] = df['col'].map('{:,}'.format)
df['col'] = df['col'].map(lambda x: f'{x:,}')

df['col'] = df['col'].apply('{:,}'.format)
df['col'] = df['col'].apply(lambda x: f'{x:,}')

所有4个版本都会将列的dtype更改为object,这对于仍然希望进行计算是没有用的。(Pandas版本:2.1.0) - undefined

4

步骤

  • 使用df.applymap()将函数应用于数据框中的每个单元格
  • 检查单元格值是否为intfloat类型
  • 对整数使用f'{x:,d}'格式化数字,对浮点数使用f'{x:,f}'格式化数字

这里是一个仅针对整数的简单示例:

df = df.applymap(lambda x: f'{x:,d}' if isinstance(x, int) else x)

2
如果你想让“.”作为千分位分隔符,“,”作为小数点,可以使用以下方法:
``` Data = pd.read_Excel(path) Data[my_numbers] = Data[my_numbers].map('{:,.2f}'.format).str.replace(",", "~").str.replace(".", ",").str.replace("~", ".") ```
如果你想要三个小数位,而不是两个,你需要将"2f"替换为"3f":
``` Data[my_numbers] = Data[my_numbers].map('{:,.3f}'.format).str.replace(",", "~").str.replace(".", ",").str.replace("~", ".") ```
请注意保留HTML标签。

1

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