2016-05-06 4 views
1

Я вытаскиваю данные из Impala, используя impyla, и преобразовываю их в dataframe с помощью as_pandas. И я использую Pandas 0.18.0, Python 2.7.9Не вычисляемая сумма для всех столбцов в pandas dataframe

Я пытаюсь вычислить сумму всех столбцов в фрейме данных и попытаться выбрать столбцы, которые больше порога.

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) 

Still Я получаю те же ошибки, Пожалуйста, помогите мне в решении этого.

Примечание: Во всех колонках не имеет строк, то есть символы и пропущенные значения или 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()' не гарантирует ваш тип данных вашего фрейма. Он задний. Вы проверяли dtypes после 'self.data.convert_objects (convert_numeric = True) 'снова? Теперь больше нет типов объектов? Если нет, возможно, вы не сделали это как 'self.data = self.data.convert_objects (convert_numeric = True)'. Пожалуйста, проверьте. – su79eu7k

+0

Это работает, я пропускаю назначение Спасибо @ su79eu7k –

Смежные вопросы