Не рассчитывается сумма для всех столбцов в панде
Я вытаскиваю данные из Импалы, используя 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()
Или вы должны их очистить.