Безопасно ли устанавливать столбцы данных с помощью срезов ilo c? - PullRequest
0 голосов
/ 22 января 2020

Допустим, у меня есть несколько простых данных с 10 столбцами и n строками. Многие строки имеют некоторые значения NaN, поэтому я использую imputer scikit-learn для заполнения этих значений.

Однако первые три столбца по сути являются индексами, поэтому мне не нужно заполнять там NaN.

Поэтому у меня есть реализация, подобная этой:

imp = sklearn.impute.KNNImputer()

t = pd.DataFrame(imp.fit_transform(df.iloc[:, 3:]), columns=df.columns[3:])
df.iloc[:, 3:] = t

Глядя на df.head () и df.shape, кажется, что ничего не пошло ужасно неправильно. Однако я научился не полностью доверять pandas, когда дело доходит до нарезки кадров данных.

Есть ли очевидный недостаток в этом подходе?

1 Ответ

2 голосов
/ 22 января 2020

Вместо того, чтобы полагаться на .iloc, вы можете вернуть фрейм данных, содержащий столбцы, к которым вам нужен доступ, передав список столбцов.

С учетом 2d pandas фрейма данных

df[['col3', 'col4', 'col5', ...]] будет возвращать то же самое, что и df.iloc[:, 3:]

Кроме того, вы можете присвоить столбцам новые значения, например:

df[['col3', 'col4', 'col5', ...]] = SOME TRANSFORMATION OF THE ORIGINAL OBJECT

Так что в вашем случае мы просто напишем:

cols_to_impute = df.columns[3:]
df[cols_to_impute] = imp.fit_transform(df[cols_to_impute])

Кроме того, важно отметить, что список cols_to_impute может быть в любом порядке, и вы все равно получите те же результаты. Таким образом, вы можете использовать этот метод для случаев, когда вмененные столбцы не находятся в первых трех столбцах и вам не нужно беспокоиться об индексации.

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