我有一个要格式化的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
答案 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
您注意到,如果dtypes
是object
,则方法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