我有:
Date | var1 | var2 | var3
2018-03-08 23:23:14 | 1.2 | 100 | 2.54
2018-03-09 20:00:14 | 1.0 | 100 | 2.554
2018-03-10 22:23:14 | 5.23 | 100 | 2.11
2018-03-12 18:21:14 | 4.22 | 100 | 0.2
我想要那个:
Date | var1 | var2 | var3
2018-03-08 23:23:14 | 1.200 | 100 | 2.540
2018-03-09 20:00:14 | 1.000 | 100 | 2.554
2018-03-10 22:23:14 | 5.230 | 100 | 2.110
2018-03-12 18:21:14 | 4.220 | 100 | 0.200
我做了这个功能:
data['var1'] = data['var1'].apply(lambda x: format(x, '.3f'))
data['var3'] = data['var3'].apply(lambda x: format(x, '.3f'))
function Format()返回一个字符串而不是一个数字。 谢谢!
答案 0 :(得分:1)
这应该有所帮助。
import pandas as pd
df = pd.DataFrame({"a": [1.2, 1.0, 5.23, 4.22]})
print(df["a"].map('{:.3f}'.format))
<强>输出:强>
0 1.200
1 1.000
2 5.230
3 4.220
Name: a, dtype: object
答案 1 :(得分:1)
Pandas有一个选项display.float_format
,它是一个函数(默认None
),它接受一个浮动并返回显示所需的字符串,例如:
In []:
pd.options.display.float_format
Out[]:
None:
In []:
print(df)
Out[]:
Date var1 var2 var3
0 2018-03-08 23:23:14 1.20 100 2.540
1 2018-03-09 20:00:14 1.00 100 2.554
2 2018-03-10 22:23:14 5.23 100 2.110
3 2018-03-12 18:21:14 4.22 100 0.200
In []:
pd.options.display.float_format = '{:.3f}'.format # or lambda f: format(f, '.3f')
print(df)
Out[]:
Date var1 var2 var3
0 2018-03-08 23:23:14 1.200 100 2.540
1 2018-03-09 20:00:14 1.000 100 2.554
2 2018-03-10 22:23:14 5.230 100 2.110
3 2018-03-12 18:21:14 4.220 100 0.200
注意:这不会改变基础值,只会强制显示。
答案 2 :(得分:-1)
正如您所指出的,您的代码会将列的类型更改为字符串,这将破坏与数字操作的兼容性。实际上,我认为您不想更改两列中的值,只是打印值的方式。为此,您可以查看pandas样式表示法:https://pandas.pydata.org/pandas-docs/stable/style.html。