对我来说,此问题出现在以下简化示例中。我也能解决它(希望有一个正确的解决方案):
带警告的旧代码:
def update_old_dataframe(old_dataframe, new_dataframe):
for new_index, new_row in new_dataframe.iterrorws():
old_dataframe.loc[new_index] = update_row(old_dataframe.loc[new_index], new_row)
def update_row(old_row, new_row):
for field in [list_of_columns]:
# line with warning because of chain indexing old_dataframe[new_index][field]
old_row[field] = new_row[field]
return old_row
old_row[field] = new_row[field]
因为update_row方法中的行实际上是
Series
,我将该行替换为:
old_row.at[field] = new_row.at[field]
method
用于访问/查找
系列
. 即使两者都工作得很好,结果也是一样,这样我就不必禁用警告(=保持它们在其他地方的其他链索引问题)。