【问题标题】:How to attribute to a slice of a pandas Dataframe pointed by a variable?如何归因于变量指向的熊猫数据框切片?
【发布时间】:2015-07-31 19:57:53
【问题描述】:

下面的命令展示了如何给切片赋值:

In [81]: a=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])

In [82]: a
Out[82]: 
   0  1  2
0  1  2  3
1  4  5  6
2  7  8  9

In [83]: a.loc[1] = [10,11,12]

In [84]: a
Out[84]: 
    0   1   2
0   1   2   3
1  10  11  12
2   7   8   9

但是,我需要将其归因于变量指向的切片。我试过了

In [91]: row2 = a.loc[2]

In [92]: row2 = [13,14,15]

In [93]: a
Out[93]: 
    0   1   2
0   1   2   3
1  10  11  12
2   7   8   9

In [94]: row2
Out[94]: [13, 14, 15]

此时,我希望“a”的值为

In [96]: a
Out[96]:
    0   1   2
0   1   2   3
1  10  11  12
2  13  14  15

很明显,row2 被视为切片的副本,而不是切片本身。

所以,我的问题是:如何创建切片点的变量,并且可以用来将值赋予原始矩阵的元素?

【问题讨论】:

  • 我建议你不能(AFAIK)这是首先引入索引方法以明确表示你想修改原始 df 的原因。您最好使用row2 存储标签/索引值,然后调用a.loc[row2]= [13,14,15],因为这将是可读且正确的
  • 这个row2 = [13,14,15] 创建了一个全新的对象。如果两个名称 obj1obj2 指向同一个对象,您可以检查 obj1 is obj2。您也可以使用id(obj) 查找对象ID。

标签: python pandas copy dataframe slice


【解决方案1】:

使用切片赋值:

row2[:] = [13,14,15]

这将更新 row2 的内容,而不是它所引用的对象。

更多详情请见How assignment works with python list slice

【讨论】:

  • 谢谢子瑶。这正是我所需要的。彻底解决问题!
  • @bmello:没问题,很高兴有帮助!
猜你喜欢
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 2023-01-26
  • 2015-08-11
  • 1970-01-01
  • 2018-07-28
  • 2017-02-22
  • 1970-01-01
相关资源
最近更新 更多