是否有一种通用,有效的方法将值分配给pandas中的DataFrame子集?我有数百个行和列,我可以直接访问,但我没有设法弄清楚如何编辑他们的值而不迭代每一行,col对.例如:
In [1]: import pandas, numpy
In [2]: array = numpy.arange(30).reshape(3,10)
In [3]: df = pandas.DataFrame(array, index=list("ABC"))
In [4]: df
Out[4]:
0 1 2 3 4 5 6 7 8 9
A 0 1 2 3 4 5 6 7 8 9
B 10 11 12 13 14 15 16 17 18 19
C 20 21 22 23 24 25 26 27 28 29
In [5]: rows = ['A','C']
In [6]: columns = [1,4,7]
In [7]: df[columns].ix[rows]
Out[7]:
1 4 7
A 1 4 7
C 21 24 27
In [8]: df[columns].ix[rows] = 900
In [9]: df
Out[9]:
0 1 2 3 4 5 6 7 8 9
A 0 1 2 3 4 5 6 7 8 9
B 10 11 12 13 14 15 16 17 18 19
C 20 21 22 23 24 25 26 27 28 29
Run Code Online (Sandbox Code Playgroud)
我相信这里发生的事情是我得到的是副本而不是视图,这意味着我无法分配到原始的DataFrame.那是我的问题吗?编辑那些行x列的最有效方法是什么(最好是节奏,因为DataFrame可能占用大量内存)?
另外,如果我想用正确形状的DataFrame替换这些值,该怎么办?
And*_*den 10
使用loc
在赋值表达式(=
意味着它不相关的是否是一个视图或副本!):
In [11]: df.loc[rows, columns] = 99
In [12]: df
Out[12]:
0 1 2 3 4 5 6 7 8 9
A 0 99 2 3 99 5 6 99 8 9
B 10 11 12 13 14 15 16 17 18 19
C 20 99 22 23 99 25 26 99 28 29
Run Code Online (Sandbox Code Playgroud)
如果您使用的是0.11之前的版本,则可以使用.ix
.
正如@Jeff评论:
这是一个赋值表达式(见"高级索引与IX"的文档的部分),不返回任何东西(虽然有赋值表达式该做回事情,例如
.at
和.iat
).
df.loc[rows,columns]
可以返回一个视图,但通常它是一个副本.令人困惑,但效率很高.底线:使用
ix
,loc
,iloc
设置 (如上),并且不修改副本.
请参阅文档的"查看与复制"部分.
归档时间: |
|
查看次数: |
7808 次 |
最近记录: |