我在pandas中有一个包含四列的数据框(df),我想要一个新列来表示这四列的平均值:df ['mean'] = df.mean(1)
1 2 3 4 mean
NaN NaN NaN NaN NaN
5.9 5.4 2.4 3.2 4.225
0.6 0.7 0.7 0.7 0.675
2.5 1.6 1.5 1.2 1.700
0.4 0.4 0.4 0.4 0.400
到目前为止一切顺利。但是当我将结果保存到csv文件时,这就是我发现的:
5.9,5.4,2.4,3.2,4.2250000000000005
0.6,0.7,0.7,0.7,0.6749999999999999
2.5,1.6,1.5,1.2,1.7
0.4,0.4,0.4,0.4,0.4
我想我可以强制平均列中的格式,但是知道为什么会发生这种情况吗?
我正在使用winpy 3.3.2和pandas 0.11.0
的winpython答案 0 :(得分:2)
答案似乎正确。浮点数不能在我们的系统上完美呈现。肯定会有一些差异。阅读The Floating Point Guide。
>>> a = 5.9+5.4+2.4+3.2
>>> a / 4
4.2250000000000005
如您所说,如果您想在小数点后只获得固定数量的点,您可以随时格式化结果。
>>> "{:.3f}".format(a/4)
'4.225'
答案 1 :(得分:2)
您可以使用float_format
参数:
import pandas as pd
import io
content = '''\
1 2 3 4 mean
NaN NaN NaN NaN NaN
5.9 5.4 2.4 3.2 4.225
0.6 0.7 0.7 0.7 0.675
2.5 1.6 1.5 1.2 1.700
0.4 0.4 0.4 0.4 0.400'''
df = pd.read_table(io.BytesIO(content), sep='\s+')
df.to_csv('/tmp/test.csv', float_format='%g', index=False)
产量
1,2,3,4,mean
,,,,
5.9,5.4,2.4,3.2,4.225
0.6,0.7,0.7,0.7,0.675
2.5,1.6,1.5,1.2,1.7
0.4,0.4,0.4,0.4,0.4