我有一个DataFrame,其列的数据类型为float16,最大值为65536。当我在pandas中调用sum()以求和该列的所有值时,由于值超过,我得到了无限的“ inf”值范围。
这是求和输入数据和输出的示例:
由于sum()函数的输出值的数据类型自动跟随该列的数据类型,所以我想问一下是否有任何方法可以将panda中的sum值转换为避免不定式值?
答案 0 :(得分:1)
首先想到的是传递dtype=np.float64
参数。
df.sum(axis=1,dtype=np.float64)
但是,这将返回ValueError:
ValueError:熊猫不支持'dtype'参数 sum()的实现
可能的解决方法:
使用np.sum()
(熊猫的基础库)来传递dtype。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'col1': [35000.0, 35000.0],
'col2': [35000.0, 35000.0]
})
df['col1'] = df['col1'].astype(np.float16)
df['col2'] = df['col2'].astype(np.float16)
#print(df.sum(axis=1)) # --> results in inf
#print(df.sum(axis=1,dtype=np.float64)) # --> results in error message
print(np.sum(df.values, dtype=np.float64, axis=1)) # --> works
答案 1 :(得分:1)
到目前为止,还没有解决方案,可能的解决方法可能是@Anton vBR。 但是,当在dtype float16的数据帧列上执行归约时,它已经存在一个错误,这是令人惊讶的行为:
[已经在github上为此打开了一个错误[(https://github.com/pandas-dev/pandas/issues/22841)