不计算 pandas 数据框中所有列的总和

Not calculating sum for all columns in pandas dataframe

我正在使用 impyla 从 Impala 中提取数据,并使用 as_pandas 将它们转换为数据帧。我正在使用 Pandas 0.18.0Python 2.7.9

我正在尝试计算数据框中所有列的总和,并尝试 select 大于阈值的列。

self.data = self.data.loc[:,self.data.sum(axis=0) > 15]

但是当我 运行 时,我得到如下错误:

pandas.core.indexing.IndexingError: Unalignable boolean Series key provided

然后我试了下。

print 'length : ',len(self.data.sum(axis = 0)),' all columns : ',len(self.data.columns)

然后我得到不同的长度,即

length : 78 all columns : 83

我低于警告

C:\Python27\lib\decimal.py:1150: RuntimeWarning: tp_compare didn't return -1 or -2 for exception

为了实现我的目标,我尝试了另一种方式

for column in self.data.columns:
    sum = self.data[column].sum()
    if( sum < 15 ):
        self.data = self.data.drop(column,1) 

现在我遇到了如下其他错误:

TypeError: unsupported operand type(s) for +: 'Decimal' and 'float' C:\Python27\lib\decimal.py:1150: RuntimeWarning: tp_compare didn't return -1 or -2 for exception

然后我尝试获取每一列的数据类型,如下所示。

print 'dtypes : ', self.data.dtypes

结果的所有列都是其中之一 int64,object 和 float 64 然后我想改变对象中列的数据类型,如下所示

self.data.convert_objects(convert_numeric=True)

我仍然遇到同样的错误,请帮助我解决这个问题。

注意: 在所有列中我都没有字符串,即字符和缺失值,或者 empty.I 使用 self.data.to_csv[=25= 检查了这一点]

因为我是 pandas 和 python 的新手,请不要介意这是一个愚蠢的问题。我只想学习

请查看下面的简单代码,您可能会了解错误的原因。

import pandas as pd
import numpy as np


df = pd.DataFrame(np.random.random([3,3]))
df.iloc[0,0] = np.nan

print df
print df.sum(axis=0) > 1.5
print df.loc[:, df.sum(axis=0) > 1.5]

df.iloc[0,0] = 'string'

print df
print df.sum(axis=0) > 1.5
print df.loc[:, df.sum(axis=0) > 1.5]

          0         1         2
0       NaN  0.336250  0.801349
1  0.930947  0.803907  0.139484
2  0.826946  0.229269  0.367627

0     True
1    False
2    False
dtype: bool

          0
0       NaN
1  0.930947
2  0.826946

          0         1         2
0    string  0.336250  0.801349
1  0.930947  0.803907  0.139484
2  0.826946  0.229269  0.367627

1    False
2    False
dtype: bool

Traceback (most recent call last):
...
pandas.core.indexing.IndexingError: Unalignable boolean Series key provided

不久,您需要对数据进行额外的预处理。

df.select_dtypes(include=['object'])

如果是可转换的字符串数字,可以df.astype()转换,否则清除即可。