Не рассчитывается сумма для всех столбцов в панде

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

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

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

Но когда я запускаю это, я получаю ошибку, как показано ниже:

pandas.core.indexing.IndexingError: предоставляется недопустимый логический ключ серии

Затем я попытался, как показано ниже.

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

Тогда я получаю другую длину, т.е.

длина: 78 все столбцы: 83

И я получаю ниже предупреждение

C:\Python27\lib\decimal.py:1150: RuntimeWarning: tp_compare не вернул -1 или -2 для исключения

И чтобы достичь своей цели я попробовал другой путь

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

Теперь у меня есть другие ошибки, как показано ниже:

TypeError: неподдерживаемые типы операндов для +: 'Decimal' и 'float' C:\Python27\lib\decimal.py:1150: RuntimeWarning: tp_compare не вернул -1 или -2 для исключения

Затем я попытался получить типы данных каждого столбца, как показано ниже.

print 'dtypes : ', self.data.dtypes

В результате все столбцы являются одним из этих int64, object и float 64. Затем я подумал об изменении типа данных столбцов, которые находятся в объекте, как показано ниже.

self.data.convert_objects(convert_numeric=True)

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

Примечание. Во всех столбцах у меня нет строк, т. Е. Символов и пропущенных значений, или пустых. Я проверил это с помощью self.data.to_csv

Поскольку я новичок в пандах и питоне, пожалуйста, не возражайте, если это глупый вопрос. Я просто хочу научиться

1 ответ

Решение

Пожалуйста, ознакомьтесь с простым кодом ниже, и вы можете понять причину ошибки.

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()Или вы должны их очистить.

Другие вопросы по тегам