Python 数据帧上的就地行操作

Python 数据帧上的就地行操作,python,pandas,Python,Pandas,假设我有这个: >>> x = pandas.DataFrame([[1.0, 2.0, 3.0], [3, 4, 5]], columns=["A", "B", "C"]) >>> print x A B C 0 1 2 3 1 3 4 5 现在我想按行规范化x——也就是说,将每行除以其总和。如中所述,这可以通过x=x.div(x.sum(axis=1),axis=0)实现。但是,这会创建一个新的数据帧。如果我的数据帧很大,那么在创建

假设我有这个:

>>> x = pandas.DataFrame([[1.0, 2.0, 3.0], [3, 4, 5]], columns=["A", "B", "C"])
>>> print x
   A  B  C
0  1  2  3
1  3  4  5
现在我想按行规范化
x
——也就是说,将每行除以其总和。如中所述,这可以通过
x=x.div(x.sum(axis=1),axis=0)
实现。但是,这会创建一个新的数据帧。如果我的数据帧很大,那么在创建这个新的数据帧时会消耗大量内存,即使我立即将它指定给原始名称

是否有有效的方法执行此操作?我想要像
x.idiv()
这样的东西,它提供
div的
axis
选项,但在适当的位置更新
x
。对于这个特定的情况,我需要分区,但有时,对于所有基本操作,有类似的就地版本也很好


(我可以通过逐行迭代并将每个规范化的行分配回原始行来更新它,但这很慢,我正在寻找一个更有效的解决方案。)

您可以直接在numpy中执行此操作(无需创建副本):


也许应该为div设置一个就地标志…?

这个问题看起来很相关-(谢谢!)注意:我原以为这里存在对齐问题,但事实并非如此,因为您只进行了行平均:)…如果您使用另一个数据帧/系列进行div,则可能会出现问题,我一直在玩
values
,但是被
x.values是x.values
是假的这个事实绊倒了,我还以为它在引擎盖下面的某个地方失去了连接。@BrenBarn
x.values是x.values
是假的。。。说什么@安迪海登:这是真的!(至少对我来说。)@AndyHayden:这似乎是一个每次都返回不同ndarray对象的属性,但不知何故,这些ndarray对象都共享相同的数据。
In [11]: x1 = x.values.T

In [12]: x1
Out[12]: 
array([[ 1.,  3.],
       [ 2.,  4.],
       [ 3.,  5.]])

In [13]: x1 /= x1.sum(0)

In [14]: x
Out[14]: 
          A         B         C
0  0.166667  0.333333  0.500000
1  0.250000  0.333333  0.416667