繁体   English   中英

Python Pandas更改浮点中的值

[英]Python Pandas alterates values in floating point

我编写了一个Python脚本,该脚本可以加载一个或多个csv文件,将它们连接起来,然后将整个文件写入一个新的csv文件中。 我注意到在此操作过程中某些值已被修改,并以很小的值稍微增加/减少。 举个例子:

原始CSV:

Index SomeValue
0.000000    0.000
1.000000    0.000
2.000000    0.000
3.000000    0.000
4.000000    2.527
5.000000    0.000

保存的CSV:

Index SomeValue
0.0 0.0
1.0 0.0
2.0 0.0
3.0 0.0
4.0 2.5269999999999997
5.0 0.0

在我看来,这似乎是一个全面的错误,但我不知道是什么原因引起的。 我的脚本的pandas核心(称为循环)为:

l_tmpCsv_st = pd.read_csv(l_listElement_tc, sep='\t', index_col=0)
l_listOfCsvFiles_tst.append(l_tmpCsv_st)
# Fills in nan cells with the value "missing" to distinguish betweens a true nan and a missing value due to lacking padding
l_listOfCsvFiles_tst[-1] = l_listOfCsvFiles_tst[-1].fillna(value='missing')

# Concatenating csv file with previous ones
csvFusion = pd.concat([csvFusion, l_listOfCsvFiles_tst[-1]], axis=1)

在循环之后:

# Padding missing values of lower frequency files
csvFusion = csvFusion.fillna(method='pad')
# Determinating which columns need to be deleted (all "Unnamed" columns are panda-error results and need to be removed)
l_listColumnsToDelete_tst = [col for col in csvFusion.columns if 'Unnamed' in col]
# Dropping these columns
csvFusion.drop(l_listColumnsToDelete_tst, axis=1, inplace=True)
# Writing full stuff to file
csvFusion.to_csv(l_endFile_tc, sep='\t', decimal=',', na_rep='-')

我的脚本的其余部分与熊猫无关,只会损害可读性,因此我将其从复制/粘贴中删除。

我如何避免这个问题?

提前致谢,

版:

这确实是一个浮点错误。 将每个值四舍五入到足够的高位数可以解决该问题:

for col in csvFusion.columns:
    csvFusion[col] = csvFusion[col].round(15)

我认为您需要在to_csv参数float_format ,因为浮点精度:

print df.to_csv(float_format='%.3f')
Index,SomeValue
0.000,0.000
1.000,0.000
2.000,0.000
3.000,0.000
4.000,2.527
5.000,0.000

我认为您可以使用round

 df['SomeValue'] = df['SomeValue'].round(3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM