我有以下数据集:

df = pd.DataFrame({'col1' : [12,3,4,5,'a',5], 'col2' : [1,5,'b',6,10,1]})

如果运行df.sum(axis=0, numeric_only=True),将得到以下输出:
Series([], dtype: float64)

但是,如果将非数值更改为None,则它可以正常工作。
所以,我的问题是,当存在非数值时,如何才能找到数据集中所有列的总和?

最佳答案

我认为您可以将to_numericapply一起使用,因为to_numeric仅适用于列(Series):

print (df.apply(pd.to_numeric, errors='coerce').sum())
#same as
#print (df.apply(lambda x: pd.to_numeric(x, errors='coerce')).sum())
col1    29.0
col2    23.0
dtype: float64

另一种解决方案是使用
df = pd.concat([pd.to_numeric(df[col], errors='coerce') for col in df], axis=1).sum()
print (df)
col1    29.0
col2    23.0
dtype: float64

如果重复代码的速度只有几列快:
df.col1 = pd.to_numeric(df.col1, errors='coerce')
df.col2 = pd.to_numeric(df.col2, errors='coerce')
print (df.sum())
col1    29.0
col2    23.0
dtype: float64

我认为concat不适用于混合内容数值和字符串值的列。
示例-list comprehension是数字,numeric_only=True是非数字:
df = pd.DataFrame({'col1' : [1,3,4], 'col2' : ['1','5','b']})
print (df)
   col1 col2
0     1    1
1     3    5
2     4    b

print (df.sum(numeric_only=True))
col1    8
dtype: int64

关于python - 将存在非数值的Pandas DataFrame中的所有列求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40804706/

10-15 18:49