我有很多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。这似乎是一项简单的任务,所以如果我忽略了某些内容,请告诉我。任何建议/解决方案将不胜感激。
我建议用字符串过滤掉第一列,然后将所有其他列转换为浮点数:
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)