[英]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.