2013-10-24 24 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

相关问题