settingWithCopyWarning通过索引设置pandas

cod*_*nob 3 python indexing pandas

我试图通过索引选择设置数据框中的列的值.

myindex = (df['city']==old_name) & (df['dt'] >= startDate) & (df['dt'] < endDate)
new_name = 'Boston2
df['proxyCity'].ix[myindex ] = new_name
Run Code Online (Sandbox Code Playgroud)

在上面,我想在myindex中给定条件Boston2proxyCity列中分配值

C:\Users\blah\Anaconda3\lib\site-packages\pandas\core\indexing.py:132: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self._setitem_with_indexer(indexer, value)
Run Code Online (Sandbox Code Playgroud)

在没有引入文档中概述的问题的情况下,做我想做的事情的正确方法是什么.

使用pandas选择以多个等价条件为条件的行的链接中的答案似乎就像我实现它一样.

我不确定这样做的正确方法是什么.

unu*_*tbu 10

为避免双重索引,请更改

df['proxyCity'].ix[myindex ] = new_name
Run Code Online (Sandbox Code Playgroud)

df.loc[myindex, 'proxyCity'] = new_name
Run Code Online (Sandbox Code Playgroud)

它更有效(更少的__getitem__函数调用),在大多数情况下,将消除SettingWithCopyWarning.

但请注意,如果df是另一个DataFrame的子DataFrame,SettingWithCopyWarning即使在使用时也可以发出a df.loc[...] = new_name.在这里,Pandas警告说修改df不会影响其他DataFrame.如果这不是你的意图那么SettingWithCopyWarning可以安全地忽略.对于沉默的方法,SettingWithCopyWarning请看这篇文章.