我正在尝试使用带有panda的.sum()
对数据帧中的列的值求和。但是,对于数据类型为"float64"的所有列,panda都返回"0.00"。对于设置为整数的列,它似乎运行良好。
以下是我迄今为止尝试过的:
df = pd.read_csv(csv_file, delimiter=';')
df = df.apply(pd.to_numeric, errors='coerce').fillna(0) *#I want to convert values to numeric*
print(df['UE'].dtype) *#I print dtype of a column I am interested in to check if pandas converted as requested*
print(df.sum(skipna=True))
对于设置为float64的每一列,行df.sum(skipna=True))
返回0.00。对于"版本档案"列,它返回正确的总和271.0。(见图(。
控制台给我的是:
控制台结果
有人知道为什么会这样吗?
我发布了对未来用户有用的答案@Alollz找到了解决方案。
@ALollz建议:"我建议您查看以下内容之后的数据输出:df.apply(pd.to_numeric,errors='erce'(。。我的猜测是,所有内容都被强制为NaN,因为将其解释为数字的格式是不正确的。给定非英语列名可以是简单的,比如用作千位分隔符或十进制指示符的",",所以在read_csv中添加","或",";
事实证明,我的csv_file中的数字格式不能被panda解释为float,因为它包含comas(使用的格式示例:"8 000 000,00"。通过将decimal=','
添加到read_csv
中,panda能够将我的数字解释为floating,而不是NaN。
这是更新后的代码:
df = pd.read_csv(csv_file, delimiter=';', decimal=',')
df = df.apply(pd.to_numeric, errors='coerce').fillna(0)
print(df['UE'].dtype)
当我运行这个程序时,熊猫会给我正确的答案。