我有一个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
似乎当列的数据类型是object
时,pandas
完全忽略了格式而没有引发警告。
如果您尝试应用格式设置以获取小数点前的3个数字和2个后面的浮点数,则表示格式化不正确。 {3.2f}
中的第一个数字表示包括小数的数字的长度。所以你需要以下内容:
print(z.to_string(formatters=['{:06.2f}'.format]))
Value
0 001.70
1 000.98
2 000.85
使用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
正如你所注意到的,如果dtypes
是object
,那么方法to_string
会忽略格式化程序:
z.astype(object).to_string(formatters=['{:.2f}'.format])
# ' value\n0 1.69998\n1 0.98\n2 0.849991'