2016-11-25 15 views
2

私は、次のデータセットを持っている:合計数値以外の値があるパンダDATAFRAMEのすべての列

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に変更しても正常に動作します。

私の質問は、数値以外の値が存在する場合に、データセット内のすべての列の合計を見つける方法です。

答えて

4

私は列のみ(Series)とto_numeric作品ので、あなたがapplyto_numericを使用することができると思う:

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 

別の解決策は、list comprehensionconcatです:

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 

繰り返しであるだけでいくつかの列速い場合コード:

私はnumeric_only=Trueは、混在した内容の列(数値は文字列値では機能しません)だと思います。

サンプル - col1は数値で、col2は非数値である:

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 
+0

jezraelカンフーパンダ:) – MYGz

+0

おかげけどさんは、私は列の数が多いDFを持っていると私はプログラム的にこれをやってみたかったとしましょう? – captnolimar

+1

最初の解決策は動作しませんか? '(df.apply(lambda x:pd.to_numeric(x、errors = 'coerce')))sum())'? – jezrael

関連する問題