Python 使用熊猫进行错误的十进制计算

Python 使用熊猫进行错误的十进制计算,python,pandas,Python,Pandas,我有一个熊猫数据框(df),有四列,我想要一个新的列来表示这四列的平均值:df['mean']=df.mean(1) 到目前为止还不错。但当我将结果保存到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 我想我可以在“平均值”列中强制使用格式,但知道为什么会发生这种情况吗 我将winpython与pyt

我有一个熊猫数据框(df),有四列,我想要一个新的列来表示这四列的平均值:df['mean']=df.mean(1)

到目前为止还不错。但当我将结果保存到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
我想我可以在“平均值”列中强制使用格式,但知道为什么会发生这种情况吗


我将winpython与python 3.3.2和pandas 0.11.0一起使用,答案似乎是正确的。浮点数无法在我们的系统上完美表示。肯定会有一些不同。阅读

正如您所说的,如果您只想在小数点后获得固定数量的点,则可以设置结果的格式

>>> "{:.3f}".format(a/4)
'4.225'

答案似乎是正确的。浮点数无法在我们的系统上完美表示。肯定会有一些不同。阅读

正如您所说的,如果您只想在小数点后获得固定数量的点,则可以设置结果的格式

>>> "{:.3f}".format(a/4)
'4.225'

您可以使用
float\u格式
参数:

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

您可以使用
float\u格式
参数:

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

我在这里找到了一个很好的解决方案我在这里找到了一个很好的解决方案什么是“%g”,它是来自于表示类型吗?@AndyHayden:基本上,是的。但是由于它使用的是百分号,我认为float_格式使用的是老式的字符串格式。什么是“%g”,它的表示类型来自哪里?@AndyHayden:基本上,是的。但由于它使用的是百分号,我认为float_格式使用的是老式的字符串格式。