Нарезка 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
), и это Панды делает предупреждение.