我正在尝试在多索引数据框中设置一个值。我正在使用.loc但仍在获取SettingsWithCopyWarning。我已经阅读了文档,但是不确定如何去做。我究竟做错了什么?
“ SettingWithCopyWarning:尝试在DataFrame的切片副本上设置一个值。尝试改用.loc [row_indexer,col_indexer] = value
请参阅文档中的警告:http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.obj [item] = s“
arrays = [np.array(['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D']),
np.array(['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'])]
df = pd.DataFrame(np.random.randn(6, 8), columns=arrays)
mask = df.loc[:,('A','one')].ge(0)
df[mask].loc[:,('B')] = "A"
之所以会发生SettingWithCopyWarning,是因为您正在.loc[]
处理DataFrame的一个子集。用于.loc[]
直接选择子集,不会出现此错误。
arrays = [np.array(['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D']),
np.array(['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'])]
df = pd.DataFrame(np.random.randn(6, 8), columns=arrays)
mask = df.loc[:,('A','one')].ge(0)
df.loc[mask,('B')] = "A"
您也可以简化计算蒙版的行,因为您不需要这样做.loc[]
。
mask = df[('A','one')].ge(0) # or, df[('A','one')] >= 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句