gpt4 book ai didi

python - 你可以格式化 pandas 整数以进行显示,例如 `pd.options.display.float_format` 用于 float 吗?

转载 作者:IT老高 更新时间:2023-10-28 21:13:56 25 4
gpt4 key购买 nike

我见过 thisthis关于格式化 floating-point 数字以在 pandas 中显示,但我有兴趣为 integers 做同样的事情。

现在,我有:

pd.options.display.float_format = '{:,.2f}'.format

这适用于我数据中的 float ,但要么会在转换为 float 的整数上留下烦人的尾随零,要么我会得到不使用逗号格式化的纯整数。

pandas 文档提到了一个 SeriesFormatter 类,我无法找到任何相关信息。

或者,如果有一种方法可以编写一个字符串格式化程序,它将 float 格式化为 '{:,.2f}' 并以零尾随十进制 float 作为 '{:,d }',那也行。

最佳答案

你可以给 pandas.io.formats.format.IntArrayFormatter 打猴子补丁:

import contextlib
import numpy as np
import pandas as pd
import pandas.io.formats.format as pf
np.random.seed(2015)

@contextlib.contextmanager
def custom_formatting():
orig_float_format = pd.options.display.float_format
orig_int_format = pf.IntArrayFormatter

pd.options.display.float_format = '{:0,.2f}'.format
class IntArrayFormatter(pf.GenericArrayFormatter):
def _format_strings(self):
formatter = self.formatter or '{:,d}'.format
fmt_values = [formatter(x) for x in self.values]
return fmt_values
pf.IntArrayFormatter = IntArrayFormatter
yield
pd.options.display.float_format = orig_float_format
pf.IntArrayFormatter = orig_int_format


df = pd.DataFrame(np.random.randint(10000, size=(5,3)), columns=list('ABC'))
df['D'] = np.random.random(df.shape[0])*10000

with custom_formatting():
print(df)

产量

      A     B     C        D
0 2,658 2,828 4,540 8,961.77
1 9,506 2,734 9,805 2,221.86
2 3,765 4,152 4,583 2,011.82
3 5,244 5,395 7,485 8,656.08
4 9,107 6,033 5,998 2,942.53

with-statement之外:

print(df)

产量

      A     B     C            D
0 2658 2828 4540 8961.765260
1 9506 2734 9805 2221.864779
2 3765 4152 4583 2011.823701
3 5244 5395 7485 8656.075610
4 9107 6033 5998 2942.530551

关于python - 你可以格式化 pandas 整数以进行显示,例如 `pd.options.display.float_format` 用于 float 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29663252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com