熊猫忽略了格式化程序

问题描述 投票:0回答:3

我有一个DataFrame z,我想用格式打印

z
Out[43]: 
      Value
0   1.69998
1      0.98
2  0.849991

现在,我想影响列的格式。我做

z.to_string(formatters=['{:3.2f}'.format])
Out[46]: '      Value\n0   1.69998\n1      0.98\n2  0.849991'
z.to_string(formatters=['ZZZZ'.format])
Out[47]: '      Value\n0   1.69998\n1      0.98\n2  0.849991'

它似乎完全忽略了命令。 @jlandercy的例子对我有用 - 不知怎的,我的DataFrame坏了。我正在研究一个(非)工作示例来发布:如果我将它存储为json并重新读取它,它会神奇地开始工作:

z2    # my df
Out[75]: 
      value
0   1.69998
1      0.98
2  0.849991
print(z2.to_string(formatters=['{:.3f}'.format])) # does not work
      value
0   1.69998
1      0.98
2  0.849991
# but storing as json and reading again works
print(pd.read_json(z2.to_json()).to_string(formatters=['{:.3f}'.format]))
  value
0 1.700
1 0.980
2 0.850
python pandas
3个回答
2
投票

似乎当列的数据类型是object时,pandas完全忽略了格式而没有引发警告。


1
投票

如果您尝试应用格式设置以获取小数点前的3个数字和2个后面的浮点数,则表示格式化不正确。 {3.2f}中的第一个数字表示包括小数的数字的长度。所以你需要以下内容:

print(z.to_string(formatters=['{:06.2f}'.format]))

   Value
0 001.70
1 000.98
2 000.85

1
投票

使用Pandas 0.23.4,以下示例按预期工作:

import pandas as pd
# pd.__version__ # '0.23.4'
z = pd.DataFrame([1.69998, 0.98, 0.849991], columns=["value"])
s = z.to_string(formatters=['{:.3f}'.format])
print(s)

返回:

  value
0 1.700
1 0.980
2 0.850

正如你所注意到的,如果dtypesobject,那么方法to_string会忽略格式化程序:

z.astype(object).to_string(formatters=['{:.2f}'.format])
# '      value\n0   1.69998\n1      0.98\n2  0.849991'
© www.soinside.com 2019 - 2024. All rights reserved.