IndexError: индекс выходит за пределы при использовании функции apply для отбрасывания столбцов

Я бегу с 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 ответ


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

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

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

import pandas as pd

# create a test dataframe
external_df = pd.DataFrame({
    'Date':[ཆ/2/2011', ཇ/2/2011', ཈/2/2011', ཉ/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)


Есть идеи?

10000