2013-10-24 23 views
0

我有一個整數和字符串混合的數據框。如何使用混合類型對整個DataFrame進行求和?

In [81]: df 
Out[81]: 
    0 1 
0 1 hi 
1 3 4 

什麼是最簡單的方法得到整個幀的唯一數字的總和?在上面的例子中,我期望得到8的結果(即,總結忽略'hi')。

如果數據幀只有數字,看來我可以做df.sum()。sum()或df.as_matrix()。sum()。

然而,因爲我有混合型,和()似乎並沒有做我想做的:

In [82]: df.sum() 
Out[82]: 
0 4 
dtype: int64 

使用numeric_only標誌似乎並沒有改變任何東西。

我注意到,如果我指定軸,我可以得到正確的結果。

In [96]: df.sum(axis=0).sum() + df.sum(axis=1).sum() 
Out[96]: 8 

但我想知道是否有一個更簡單的方法來做到這一點。

謝謝。

+0

順便說一句看起來像您的方法是不正確,嘗試在'DF = pd.DataFrame運行({0:[1,3],1:[ '喜',5]})' –

+0

嗯,你是對的。感謝羅馬。無論如何,這是kludgy :)。 – capitalistcuttle

回答

2

你可以做到這一點,但請記住,dtypes是每列。所以將混合數據保存在同一列中有點令人困惑。

In [10]: df = DataFrame([[1,'hi'],[3,4]]) 

In [11]: df.dtypes 
Out[11]: 
0  int64 
1 object 
dtype: object 

In [12]: df.convert_objects(convert_numeric=True) 
Out[12]: 
    0 1 
0 1 NaN 
1 3 4 

In [13]: df.convert_objects(convert_numeric=True).unstack().sum() 
Out[13]: 8.0 
+0

謝謝傑夫。重新混合數據類型,不幸的是,我收到我的數據作爲混合類型矩陣的列表表示列表,並且我需要保留所有數據以供稍後處理。我可能會立即創建它的數字版本,因此convert_objects不會在每次需要數字結果時調用。 – capitalistcuttle

相關問題