熊猫忽略格式化程序

时间:2019-04-14 12:05:32

标签: python pandas

我有一个要格式化的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

3 个答案:

答案 0 :(得分:2)

看来,当列的数据类型为object时,pandas会完全忽略格式而不会发出警告。

答案 1 :(得分:1)

使用熊猫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'

答案 2 :(得分:1)

如果您尝试套用格式来获​​取浮点数,则小数点前应有3个数字,而小数点后应有2个数字,则表示格式不正确。 {3.2f}中的第一个数字代表数字的长度,包括小数。因此,您将需要以下内容:

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

   Value
0 001.70
1 000.98
2 000.85