熊猫df.sum()仅创建0

sha*_*han 3 python pandas

我有很多df信息要添加“总计”列。但是,当我使用该sum()方法时,结果列仅填充了0个值。

这是我的一部分df:

    COL NAME0  COL NAME1  COL NAME2  COL NAME3  COL NAME4
0     Alabama   4.099099   4.090001   2.042345   NaN
1      Alaska   1.396396   1.390001   1.000000   1.000000
2     Arizona   4.189189   NaN        2.003257   1.537777
3    Arkansas   2.927928   2.920001   2.208723   NaN
4  California   3.378378   3.780001   1.754930   2.012395
Run Code Online (Sandbox Code Playgroud)

要添加该Total列,我做了以下工作:

    COL NAME0  COL NAME1  COL NAME2  COL NAME3  COL NAME4
0     Alabama   4.099099   4.090001   2.042345   NaN
1      Alaska   1.396396   1.390001   1.000000   1.000000
2     Arizona   4.189189   NaN        2.003257   1.537777
3    Arkansas   2.927928   2.920001   2.208723   NaN
4  California   3.378378   3.780001   1.754930   2.012395
Run Code Online (Sandbox Code Playgroud)

这创建了以下内容df:

    COL NAME0  COL NAME1  COL NAME2  COL NAME3  COL NAME4  Total
0     Alabama   4.099099   4.090001   2.042345   NaN        0.0
1      Alaska   1.396396   1.390001   1.000000   1.000000   0.0
2     Arizona   4.189189   NaN        2.003257   1.537777   0.0
3    Arkansas   2.927928   2.920001   2.208723   NaN        0.0
4  California   3.378378   3.780001   1.754930   2.012395   0.0

Run Code Online (Sandbox Code Playgroud)

然后,我尝试了一种不同的方法,一次将每一列添加到该Total列中:

df['Total'] = df.sum(axis=1)
Run Code Online (Sandbox Code Playgroud)

但是,这导致该Total列仅填充NaN值。

我的猜测是列中的现有NaN值df正在导致此行为Total。这似乎是一项简单的任务,所以如果我忽略了某些内容,请告诉我。任何建议/解决方案将不胜感激。

jez*_*ael 5

我建议用字符串过滤掉第一列,然后将所有其他列转换为浮点数:

df['Total'] = df.iloc[:, 1:].astype(float).sum(axis=1)
Run Code Online (Sandbox Code Playgroud)
print (df.dtypes)
COL NAME0    object
COL NAME1    object
COL NAME2    object
COL NAME3    object
COL NAME4    object
dtype: object

df['Total'] = df.sum(axis=1)
print (df)
    COL NAME0 COL NAME1 COL NAME2 COL NAME3 COL NAME4  Total
0     Alabama  4.099099  4.090001  2.042345       NaN    0.0
1      Alaska  1.396396  1.390001  1.000000  1.000000    0.0
2     Arizona  4.189189       NaN  2.003257  1.537777    0.0
3    Arkansas  2.927928  2.920001  2.208723       NaN    0.0
4  California  3.378378  3.780001  1.754930  2.012395    0.0

df['Total'] = df.iloc[:, 1:].astype(float).sum(axis=1)
print (df)
    COL NAME0 COL NAME1 COL NAME2 COL NAME3 COL NAME4      Total
0     Alabama  4.099099  4.090001  2.042345       NaN  10.231445
1      Alaska  1.396396  1.390001  1.000000  1.000000   4.786397
2     Arizona  4.189189       NaN  2.003257  1.537777   7.730223
3    Arkansas  2.927928  2.920001  2.208723       NaN   8.056652
4  California  3.378378  3.780001  1.754930  2.012395  10.925704
Run Code Online (Sandbox Code Playgroud)

如果以后需要处理列:

df =  df.astype(dict.fromkeys(df.columns[1:], 'float'))
print (df.dtypes)
COL NAME0     object
COL NAME1    float64
COL NAME2    float64
COL NAME3    float64
COL NAME4    float64
dtype: object


df['Total'] = df.sum(axis=1)
print (df)
    COL NAME0  COL NAME1  COL NAME2  COL NAME3  COL NAME4      Total
0     Alabama   4.099099   4.090001   2.042345        NaN  10.231445
1      Alaska   1.396396   1.390001   1.000000   1.000000   4.786397
2     Arizona   4.189189        NaN   2.003257   1.537777   7.730223
3    Arkansas   2.927928   2.920001   2.208723        NaN   8.056652
4  California   3.378378   3.780001   1.754930   2.012395  10.925704
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这很完美! (2认同)