【发布时间】:2021-03-16 19:02:50
【问题描述】:
我正在尝试使用带有熊猫的.sum() 对数据框中的列值求和。但是,pandas 会为所有数据类型为“float64”的列返回“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))
df.sum(skipna=True)) 行对设置为 float64 的每一列返回 0.00。
对于“版本档案”列,它返回正确的总和,即 271.0。 (见合影)。
这是控制台给我的:
有人知道为什么会这样吗?
【问题讨论】:
-
将您的 csv 数据(或前 10 行)复制并粘贴为代码,以便我们查看问题所在。
-
我建议你看看你的数据输出之后:
df.apply(pd.to_numeric, errors='coerce').。我的猜测是一切都被强制为 NaN,因为格式不正确,无法解释为数字。鉴于非英语列名可能很简单,例如将','用作千位分隔符或小数指示符,因此将thousands=','或decimal=','添加到read_csv -
@ALollz 我尝试按照您的建议将 decimal=',' 添加到 read_csv 并且效果很好。原来问题是你猜的。它确实是一个法国文件,我的 csv 使用的是这种数字格式:'8000000,00'。如果没有参数 decimal=',',Pandas 无法读取它。非常感谢你的帮助 !我有点失落。
-
@pakpe 感谢您的宝贵时间。这是 csv 的示例(不起作用的列“UE”):
UE 800000,00 17324000,00 149850,00 50000,00 800000,00 309739,00 55000,00 500000,00 131186,65事实证明,问题在于使用昏迷。按照 ALollz 的建议,通过将decimal=','添加到read_csv,它工作得很好。
标签: python pandas dataframe csv sum