Нарезка Pandas DataFrame в новый DataFrame

Я хотел бы нарезать DataFrame с булевым индексом для получения копии, а затем выполнить на этой копии материал независимо от исходного DataFrame.

Судя по этому ответу, выбрав с .loc использование логического массива вернет мне копию, но затем, если я попытаюсь изменить копию, SettingWithCopyWarning мешает. Будет ли это тогда правильным путем:

import numpy as np
import pandas as pd
d1 = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
# create a new dataframe from the sliced copy
d2 = pd.DataFrame(d1.loc[d1.a > 1, :])
# do stuff with d2, keep d1 unchanged

1 ответ

Тебе нужно copy с boolean indexing, новый DataFrame конструктор не нужен:

d2 = d1[d1.a > 1].copy()

Объяснение предупреждения:

Если вы измените значения в d2 позже вы обнаружите, что изменения не распространяются обратно на исходные данные (d1), и это Панды делает предупреждение.

Другие вопросы по тегам