IndexError: индекс выходит за пределы при использовании функции apply для отбрасывания столбцов - PullRequest
1 голос
/ 25 марта 2020

Я работаю с python 3.7.6

Я пытаюсь удалить (отбросить) столбцы, которые имеют небольшую скорость (небольшую скорость согласно numpy.array)

Я пробовал следующие команды:

    from sklearn.feature_selection import mutual_info_classif
    mutual_information_feature_to_target  = mutual_info_classif(X, y, n_neighbors=10)
    df.drop(df.columns[df.apply(lambda col: mutual_information_feature_to_target[col] < 0.5)], axis=1, inplace=True)

Но я получаю следующую ошибку:

IndexError: ('index 36 is out of bounds for axis 0 with size 19', 'occurred at index GP')

Что я делаю не так и как правильно?

Подробнее (при необходимости):

mutual_information_feature_to_target.shape = (19,)
df.shape = (1340, 20)


df.iloc[0] = 

GP             36.0
MIN            27.4
PTS             7.4
FGM             2.6
FGA             7.6
FG%            34.7
3P Made         0.5
3PA             2.1
3P%            25.0
FTM             1.6
FTA             2.3
FT%            69.9
OREB            0.7
DREB            3.4
REB             4.1
AST             1.9
STL             0.4
BLK             0.4
TOV             1.3
TARGET_5Yrs     0.0
Name: 0, dtype: float64


df.iloc[36] = 

GP             82.0
MIN            18.4
PTS             5.5
FGM             2.0
FGA             5.3
FG%            37.0
3P Made         0.1
3PA             0.7
3P%            14.5
FTM             1.4
FTA             1.9
FT%            74.1
OREB            0.4
DREB            1.3
REB             1.7
AST             3.8
STL             0.7
BLK             0.1
TOV             1.2
TARGET_5Yrs     1.0
Name: 36, dtype: float64

1 Ответ

0 голосов
/ 26 марта 2020

для удобства чтения я изменю имя переменной mutal_information_feature_to_target на external_df

К сожалению, это решение не является однострочным. Лог c должен:

перебирать внешний df.
найти имена столбцов со значением, меньшим константы min_value.
добавить эти имена столбцов в список.
вызвать df.drop в локальном кадре данных и передать список недопустимых имен столбцов

import pandas as pd

# create a test dataframe
external_df = pd.DataFrame({
    'Date':['10/2/2011', '11/2/2011', '12/2/2011', '13/2/2011'], 
    'Product':['Umbrella', 'Matress', 'Badminton', 'Shuttle'], 
    'Last_Price':[1200, 1500, 1600, 352], 
    'Updated_Price':[1250, 1450, 1550, 400], 
    'Discount':[10, 10, 10, 10]
})

print(external_df)

invalid_columns = [] # empty list to store column names
min_value = 0.5 # this is your minimum acceptable value per column

for (columnName, columnData) in external_df.iteritems():
     series = external_df[columnName] # save each column as a series
     if series.dtype == 'int64': #check to make sure each column is a float
             if len(series[series < min_value]): #check for any values < min
                     print(columnName) 
                     invalid_columns.append(columnName)

print(invalid_columns)
df.drop(invalid_columns, axis=1, inplace=True) #drop columns here

print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...