繁体   English   中英

对 Pandas 数据帧(和 Numpy)进行子集就地更新的 Pythonic 方式是什么

[英]What is the Pythonic Way of doing a subset in-place update to a Pandas Dataframe (and Numpy)

假设 'data' 是一个 Pandas DataFrame,其中 'rows' 是所有行,'cols' 是一些小于或等于实际列数的数字。 我有以下代码可以很好地将该空间中的所有数据乘以“比例”。 我特别避免使用列名,我需要使用列索引。

rows = len(data.index)
for row in range(0,rows):
    for col in range (0, cols):
        data.iat[row,col] = data.iat[row,col] * scale

但是,正如您所看到的,这不像 Python 或 Pandas。 什么是 Python/Pandas 方式? 假设所有行都会受到影响,但只有从 0 到 cols-1 的列。 例如,如果数据帧是 5x4 但 cols=3,那么只会更新 0,1,2 列(在所有行中)。 换句话说,如果这是我的数据框:

1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

并且 scale 是 10 并且 cols 是 3 那么结果应该是:

10 20 30 4
10 20 30 4
10 20 30 4
10 20 30 4
10 20 30 4

另外,请为 Numpy 数组提供相同的问题/答案。

不确定这是否是您想要的:它使用 iloc 方法来更改列的值。 iloc 的基本思想是使用行和列的索引号。 您可以在此处阅读更多相关信息:

df.iloc[:,0:3] = df.iloc[:,0:3].mul(10)

    0   1   2   3
0   10  20  30  4
1   10  20  30  4
2   10  20  30  4
3   10  20  30  4
4   10  20  30  4

Jon Clement 提供了另一个更简洁的选择:

df.iloc[:,:-1] *= 10 

这更简单,代码更少,并且仍然可以理解。 谢谢乔恩!

使用数据帧切片

>>> df = pd.DataFrame({'a': [1,1,1,1,1], 'b': [2,2,2,2,2], 'c': [3,3,3,3,3], 'd': [4,4,4,4,4]})                                                                 

>>> df                                                                                                                                              
   a  b  c  d
0  1  2  3  4
1  1  2  3  4
2  1  2  3  4
3  1  2  3  4
4  1  2  3  4

>>> df.loc[:, 'a':'c'] = df.loc[:, 'a':'c'] * 10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM