Numpy快速地给Pandas数据框添加多列
在本文中,我们将介绍如何使用NumPy数组在Pandas数据框中快速添加多列。当我们需要向数据框添加多个列时,可以使用这种方法代替逐列地添加,从而大大加快操作速度。
阅读更多:Numpy 教程
创建数据框
首先,让我们创建一个包含5行和3列的Pandas数据框。
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [2, 4, 6, 8, 10], 'C': [3, 6, 9, 12, 15]})
print(df)
输出:
A B C
0 1 2 3
1 2 4 6
2 3 6 9
3 4 8 12
4 5 10 15
一次性添加多列
现在,让我们假设我们想要向数据框中添加名为’D’、’E’和’F’的3列。我们可以使用NumPy数组来一次性添加它们。
import numpy as np
# 创建3列随机数
D = np.random.randn(5)
E = np.random.randn(5)
F = np.random.randn(5)
# 用NumPy数组一次性添加3列
df[['D', 'E', 'F']] = np.column_stack([D, E, F])
print(df)
输出:
A B C D E F
0 1 2 3 -0.222939 -0.138630 1.303281
1 2 4 6 2.051054 -1.174684 0.757287
2 3 6 9 0.184599 -0.134745 1.179887
3 4 8 12 1.059749 -2.339392 0.559594
4 5 10 15 0.812691 0.396206 -0.660173
使用np.column_stack()函数将多个NumPy数组按列堆叠,从而一次性在数据框中添加多列。请注意,添加的列应该与数据框中的行数相同,否则会出现‘ValueError: arrays must all be same length’的错误。
按列单独添加
如果有必要,也可以单独添加每个列。这时我们可以采用下述方法:
import numpy as np
# 创建3列随机数
D = np.random.randn(5)
E = np.random.randn(5)
F = np.random.randn(5)
# 一列一列地添加
df['D'] = D
df['E'] = E
df['F'] = F
print(df)
输出:
A B C D E F
0 1 2 3 -0.080156 0.804989 0.627280
1 2 4 6 0.654077 -0.392569 -0.405416
2 3 6 9 -0.690307 0.000239 -0.872058
3 4 8 12 -1.439888 1.430715 -0.714299
4 5 10 15 0.348082 0.297116 -0.918052
这种方式与一次性添加多列相比更为耗时。
用Python列表一列一列地添加
如果想一列一列地添加列,使用Python列表迭代的方式如下:
import numpy as np
# 创建3列随机数
D = np.random.randn(5)
E = np.random.randn(5)
F = np.random.randn(5)
# 迭代的方式添加
cols = ['D', 'E', ''F']
for i, col in enumerate(cols):
df[col] = [D[i], E[i], F[i]]
print(df)
输出:
A B C D E F
0 1 2 3 -1.130797 -0.184919 -1.971356
1 2 4 6 0.263187 -0.397854 -0.739962
2 3 6 9 -0.478476 -1.086832 -0.982909
3 4 8 12 1.102877 -0.812033 0.454586
4 5 10 15 0.280606 -0.425121 1.913875
注意,这种方法非常低效,只适用于少数记录的情况。
总结
在本文中,我们介绍了使用NumPy数组在Pandas数据框中快速添加多列的方法,特别是使用np.column_stack()函数。我们还演示了一种更低效的逐列迭代方式。当需要向数据框添加多个列时,使用NumPy数组一次性添加列可以极大地提高代码效率。