【发布时间】:2017-05-17 18:34:21
【问题描述】:
假设我有一个 pandas 数据框,我想为所有数字(整数和浮点数)添加千位分隔符,有什么简单快捷的方法?
【问题讨论】:
标签: python pandas number-formatting separator
假设我有一个 pandas 数据框,我想为所有数字(整数和浮点数)添加千位分隔符,有什么简单快捷的方法?
【问题讨论】:
标签: python pandas number-formatting separator
使用, 格式化数字时,您可以使用'{:,}'.format:
n = 10000
print '{:,}'.format(n)
n = 1000.1
print '{:,}'.format(n)
在 pandas 中,您可以将formatters 参数用于to_html,如here 所述。
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)
【讨论】:
将Series.map 或Series.apply 与此solutions 一起使用:
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:,}')
【讨论】:
如果你想要“。”作为千位分隔符和“,”作为小数分隔符,这将起作用:
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("~", ".")
【讨论】:
步骤
df.applymap() 将函数应用于数据框中的每个单元格int 或float 类型
f'{x:,d}' 为整数和f'{x:,f}' 为浮点数格式化数字这是一个仅适用于整数的简单示例:
df = df.applymap(lambda x: f'{x:,d}' if isinstance(x, int) else x)
【讨论】:
to_html 中的 formatters 参数将采用字典。
【讨论】: