[英]Correct way to set value in multi-index Pandas Dataframe
我正在嘗試在多索引數據框中設置一個值。 我正在使用.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是因為您在DataFrame的子集上執行.loc[]
。 使用.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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.