格式化pandas整数以供显示

Mic*_*l K 18 python pandas

我已经看到了对大熊猫中显示的格式浮点数字,但我有兴趣做同样的事情为整数.

现在,我有

pd.options.display.float_format = '{:,.2f}'.format
Run Code Online (Sandbox Code Playgroud)

这对我的数据中的浮点数很有用,但是要么会在转换为浮点数的整数上留下恼人的尾随零,要么我将使用不用逗号格式化的普通整数.

大熊猫文档提到了一个SeriesFormatter我无法找到任何信息的课程.

或者,如果有一种方法可以编写单个字符串格式化程序,它将浮点数格式化为'{:,.2f}'浮点数并且尾随小数为零'{:,d}',那也可以.

unu*_*tbu 10

你可以修补猴子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)
Run Code Online (Sandbox Code Playgroud)

产量

      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
Run Code Online (Sandbox Code Playgroud)

在外面with-statement:

print(df)
Run Code Online (Sandbox Code Playgroud)

产量

      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
Run Code Online (Sandbox Code Playgroud)

  • @leonyin:您可以使用上下文管理器.我已修改帖子以显示我的意思. (2认同)

Joh*_*ohn 7

Jupyter notebooks 的另一个选择是使用df.style.format('{:,}'),但据我所知,它只适用于单个数据帧,因此您每次都必须调用它:

table.style.format('{:,}')
          col1       col2
0s   9,246,452  6,669,310
>0   2,513,002  5,090,144

table
       col1     col2
0s  9246452  6669310
>0  2513002  5090144
Run Code Online (Sandbox Code Playgroud)

样式 — pandas 1.1.2 文档

  • @Farid你可能有几个选择,文档(上面链接)说“.format”可以接受一个函数,所以你可以有一个函数来检查类型,然后以不同于数字的方式格式化字符串。另一种选择是“.format”可以采用“dict”,其中键指定列,并且不同列的值具有不同的格式。 (2认同)

ost*_*ach 6

从 Pandas 1.3.0 开始,您可以指定df.style.format(thousands=',')使用逗号分隔浮点数、复数和整数中的千位。

请参阅文档:Styler.format