Format()返回字符串不是数字?

时间:2018-05-28 15:33:17

标签: python pandas

我有:

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()返回一个字符串而不是一个数字。 谢谢!

3 个答案:

答案 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