在 Python pandas DataFrame 中向数字添加千位分隔符的简单方法
Easy way to add thousand separator to numbers in Python pandas DataFrame
假设我有一个 pandas 数据框,我想为所有数字(整数和浮点数)添加千位分隔符,有什么简单快捷的方法可以做到这一点?
使用 ,
格式化数字时,您可以只使用 '{:,}'.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)
添加千位分隔符实际上已经在 Whosebug 上进行了大量讨论。您可以在 此处阅读 或 here.
to_html中的formatters参数会取一个字典。
Click the example link for reference
假设您只想显示(或渲染到 html)带有千位分隔符的 floats/integers,您可以使用在版本 0.17.1 中添加的 styling:
import pandas as pd
df = pd.DataFrame({'int': [1200, 320], 'flt': [5300.57, 12000000.23]})
df.style.format('{:,}')
要将此输出渲染到 html,您可以使用 Styler
上的渲染方法。
如果你想要“.”作为千位分隔符和“,”作为小数点分隔符这将有效:
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("~", ".")
使用Series.map
or Series.apply
with this 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:,}')
步骤
- 使用
df.applymap()
将函数应用于数据框中的每个单元格
- 检查单元格值的类型是
int
还是 float
- 对整数使用
f'{x:,d}'
对浮点数使用 f'{x:,f}'
格式化数字
这是一个仅适用于整数的简单示例:
df = df.applymap(lambda x: f'{x:,d}' if isinstance(x, int) else x)
假设我有一个 pandas 数据框,我想为所有数字(整数和浮点数)添加千位分隔符,有什么简单快捷的方法可以做到这一点?
使用 ,
格式化数字时,您可以只使用 '{:,}'.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)
添加千位分隔符实际上已经在 Whosebug 上进行了大量讨论。您可以在 此处阅读 或 here.
to_html中的formatters参数会取一个字典。
Click the example link for reference
假设您只想显示(或渲染到 html)带有千位分隔符的 floats/integers,您可以使用在版本 0.17.1 中添加的 styling:
import pandas as pd
df = pd.DataFrame({'int': [1200, 320], 'flt': [5300.57, 12000000.23]})
df.style.format('{:,}')
要将此输出渲染到 html,您可以使用 Styler
上的渲染方法。
如果你想要“.”作为千位分隔符和“,”作为小数点分隔符这将有效:
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("~", ".")
使用Series.map
or Series.apply
with this 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:,}')
步骤
- 使用
df.applymap()
将函数应用于数据框中的每个单元格 - 检查单元格值的类型是
int
还是float
- 对整数使用
f'{x:,d}'
对浮点数使用f'{x:,f}'
格式化数字
这是一个仅适用于整数的简单示例:
df = df.applymap(lambda x: f'{x:,d}' if isinstance(x, int) else x)