2016-05-06 119 views
1

我使用impyla從Impala提取數據,並使用as_pandas將它們轉換爲數據框。我正在使用Pandas 0.18.0Python 2.7.9不計算大熊貓數據框中所有列的總和

我想計算一個數據框中所有列的總和,並試圖選擇大於閾值的列。

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,對象的一個​​和浮64 然後,我想改變其在對象像下面

self.data.convert_objects(convert_numeric=True) 

仍然列的數據類型的我得到了同樣的錯誤,請幫助我解決這個問題。

注:在所有我沒有字符串,即字符和缺失值或empty.I已經檢查了這列使用self.data.to_csv

由於我是新來的熊貓和蟒蛇請不要介意這是一個愚蠢的問題。我只是想學習

回答

0

請檢查下面的簡單代碼,你可能會明白錯誤的原因。

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()轉換,或者你應該清除它們。

+0

在所有的列中,我只有數字既沒有字符串也沒有南。在這個問題上加了這個點 –

+0

@ManojKumar'pd.to_csv()'不保證你的數據框的值類型。它是後面的。 'self.data後檢查了dtypes。convert_objects(convert_numeric = True)'再次?現在沒有更多的「對象」類型?如果沒有,也許你沒有像'self.data = self.data.convert_objects(convert_numeric = True)'那樣放置。請檢查。 – su79eu7k

+0

它正在工作我失蹤的任務謝謝@ su79eu7k –