【发布时间】:2017-12-11 12:29:59
【问题描述】:
我想使用布尔索引对 DataFrame 进行切片以获得副本,然后在该副本上独立于原始 DataFrame 执行操作。
从这个answer 来看,使用布尔数组选择.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
【问题讨论】:
-
SettingWithCopyWarning只是一个警告。它告诉您,您对该 DataFrame 所做的修改不会更改原始 DataFrame。您可以完全禁用它们,也可以在分配后使用d2.is_copy = None。 -
DataFrame.is_copy 不再在 API 中。