你可以格式化 pandas 整数以进行显示,例如用于浮点数的 `pd.options.display.float_format` 吗? [英] Can you format pandas integers for display, like `pd.options.display.float_format` for floats?

查看:25
本文介绍了你可以格式化 pandas 整数以进行显示,例如用于浮点数的 `pd.options.display.float_format` 吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我见过 这个this 关于格式化 floating-point 数字以在 pandas 中显示,但我有兴趣为 整数 做同样的事情.

I've seen this and this on formatting floating-point numbers for display in pandas, but I'm interested in doing the same thing for integers.

现在,我有:

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

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

That works on the floats in my data, but will either leave annoying trailing zeroes on integers that are cast to floats, or I'll have plain integers that don't get formatted with commas.

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

The pandas docs mention a SeriesFormatter class about which I haven't been able to find any information.

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

Alternatively, if there's a way to write a single string formatter that will format floats as '{:,.2f}' and floats with zero trailing decimal as '{:,d}', that'd work too.

推荐答案

你可以猴子补丁 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

这篇关于你可以格式化 pandas 整数以进行显示,例如用于浮点数的 `pd.options.display.float_format` 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆