【问题标题】:sum of a column : Pandas .sum() returns 0.0列的总和:Pandas .sum() 返回 0.0
【发布时间】: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。 (见合影)。

这是控制台给我的:

Console results

有人知道为什么会这样吗?

【问题讨论】:

  • 将您的 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


【解决方案1】:

我发布了对未来用户有用的答案。 @Alollz 找到了解决方案。

@ALollz 建议: “我建议您在 df.apply(pd.to_numeric,errors='coerce') 之后查看数据的输出。我的猜测是一切都被强制转换为 NaN,因为格式不正确,无法解释为数字。鉴于非英语的列名可以是简单的“,”,用作千位分隔符或小数指示符,因此将千位=','或十进制=','添加到 read_csv"

原来我的 csv_file 中的数字的格式不能被 pandas 解释为浮点数,因为它包含逗号(使用的格式示例:'8 000 000,00'。通过将 decimal=',' 添加到 @987654322 @,pandas 能够将我的数字解释为浮点数而不是 NaN。

这是更新后的代码:

df = pd.read_csv(csv_file, delimiter=';', decimal=',')
df = df.apply(pd.to_numeric, errors='coerce').fillna(0)
print(df['UE'].dtype)

当我运行它时,pandas 会给我正确的答案。

【讨论】:

    猜你喜欢
    • 2018-07-16
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多