Подтвердить что ты не робот

Извлечение определенных выбранных столбцов в новый DataFrame в качестве копии

У меня есть pandas DataFrame с 4 столбцами, и я хочу создать новый DataFrame, который только имеет три столбца. Этот вопрос аналогичен: Извлечение определенных столбцов из фрейма данных, но для pandas not R. Следующий код не работает, вызывает ошибку и, конечно же, не является пандаснический способ сделать это.

import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new = pd.DataFrame(zip(old.A, old.C, old.D)) # raises TypeError: data argument can't be an iterator 

Что такое пандаснический способ сделать это?

4b9b3361

Ответ 1

Есть способ сделать это, и он на самом деле похож на R

new = old[['A', 'C', 'D']].copy()

Здесь вы просто выбираете нужные столбцы из исходного фрейма данных и создаете для них переменную. Если вы хотите вообще изменить новый фреймворк, вы, вероятно, захотите использовать .copy(), чтобы избежать SettingWithCopyWarning.

Альтернативный метод - использовать filter, который будет создавать копию по умолчанию:

new = old.filter(['A','B','D'], axis=1)

Наконец, в зависимости от количества столбцов в исходном фреймворке данных может быть более сжатым выражение с помощью drop (это также создаст копию по умолчанию):

new = old.drop('B', axis=1)

Ответ 2

Кажется, еще один более простой способ:

new = pd.DataFrame([old.A, old.B, old.C]). transpose()

где old.column_name даст вам серию. Составьте список всех столбцов, которые вы хотите сохранить, и передайте их в конструктор DataFrame. Нам нужно сделать транспонирование, чтобы настроить форму.

In [14]:pd.DataFrame([old.A,old.B,old.C]).transpose()
Out[14]: 
   A   B    C
0  4  10  100
1  5  20   50

Ответ 3

Самый простой способ

new = old[['A','C','D']]

,

Ответ 4

Универсальная функциональная форма

def select_columns(data_frame, column_names):
    new_frame = data_frame.loc[:, column_names]
    return new_frame

Специально для вашей проблемы выше

selected_columns = ['A', 'C', 'D']
new = select_columns(old, selected_columns)

Ответ 5

Насколько я могу судить, вам не обязательно указывать ось при использовании функции фильтра.

new = old.filter(['A','B','D'])

возвращает тот же кадр данных, что и

new = old.filter(['A','B','D'], axis=1)

Ответ 6

столбцы по индексу:

# selected column index: 1, 6, 7
new = old.iloc[: , [1, 6, 7]].copy()