为什么我不能给Pandas DataFrame的部分赋值?
我有点困惑,为什么下面这个 pandas
代码没有成功把A列的最后两个值赋给B列的前两个位置:
df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7], 'B': [10, 20, 30, 40, 50, 60, 70]})
df = df.join(pd.DataFrame({'C': ['a', 'b', 'c', 'd', 'e', 'f', 'g']}))
df['B2'] = df.B.shift(2)
df[:2].B2 = list(df[-2:].A)
让我感到困惑的是,在一个(看起来)相似的“真实”应用中,它似乎是可以工作的(并且产生了一些奇怪的行为)。
为什么最后的赋值没有改变数据表中两个条目的值呢?
1 个回答
5
它可能会工作,这就是它的狡猾之处,看看这里:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
通常来说,对于多种数据类型的框架,它是否能正常工作取决于你是什么时候构建的(例如,如果你一次性创建所有内容,我觉得它总是能正常工作)。因为你是在之后创建的(通过连接),所以这就依赖于底层numpy视图创建的机制。
千万千万不要那样赋值,使用loc
。
df.loc[:2,'B2'] = ....