【问题标题】:Why can't I assign to part of my Pandas DataFrame?为什么我不能分配给我的 Pandas DataFrame 的一部分?
【发布时间】:2014-04-22 20:46:36
【问题描述】:

我很困惑为什么下面的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)

令我困惑的是,在(显然)等效的“真实”应用程序中,它似乎确实可以工作 (and to generate some strange behavior)。

为什么最后的赋值没有改变dataframe中两个entry的值?

【问题讨论】:

    标签: python join pandas dataframe


    【解决方案1】:

    可以工作,这就是它阴险的原因,请看这里:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

    通常对于多类型框架,它取决于 when 的构造(例如,如果你一次创建它,我认为它总是有效的)。由于您是在之后(通过连接)创建它,因此它依赖于底层的 numpy 视图创建机制。

    永远不要这样分配,使用loc

    df.loc[:2,'B2'] = ....
    

    【讨论】:

    • 这似乎有点太“聪明”了!它确实linked question 中起作用这一事实是否可以解释那里(对我而言)奇怪的对齐行为?
    • 似乎很可能;数据可能正确分配,也可能未正确分配。
    猜你喜欢
    • 2017-07-20
    • 2012-11-10
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2020-10-20
    • 2019-10-26
    • 1970-01-01
    相关资源
    最近更新 更多