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
是假的这个事实绊倒了,我还以为它在引擎盖下面的某个地方失去了连接。@BrenBarnx.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