替换满足某些条件的pandas列中的值会导致SettingWithCopyWarning

时间:2017-02-02 06:32:26

标签: python python-2.7 pandas

matching(t, word) #[1] "Where" "is" "money" "here" 属于dtrain

类型

执行以下操作的正确方法是什么?

<class 'pandas.core.frame.DataFrame'>

我收到警告:

  

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/indexing.py:477:   SettingWithCopyWarning:       尝试在DataFrame的切片副本上设置值。       尝试使用.loc [row_indexer,col_indexer] = value而不是

注意: 之前我使用

创建target = dtrain.iloc[:,1] > 0 dtrain.ix[target, 1] = 0
dtrain

这可能是一个n00b问题。我是Python的新手,并没有一个好的模型在我的头脑中,但是什么触发了深层复制,什么只是一个指针......

1 个答案:

答案 0 :(得分:1)

我认为首先可以简化以下代码:

dtrain = d.loc[(d.yyyy < 2005) & (d.yyyy >= 1995),:]

为:

dtrain = d[(d.yyyy < 2005) & (d.yyyy >= 1995)]

它被称为boolean indexing

然后添加copy - see docs

dtrain = d[(d.yyyy < 2005) & (d.yyyy >= 1995)].copy()