我碰到了这段代码
app_train_poly, app_test_poly = app_train_poly.align(app_test_poly, join = 'inner', axis = 1)
这里app_train_poly和app_test_poly是熊猫数据框。
我知道使用align()可以对这两个数据帧进行某种组合,但是我无法直观地看到它实际上是如何工作的。
我搜索了文档,但找不到任何说明性示例。
您处于正确的轨道,除了DataFrame.align
不合并两个数据框,而是将它们对齐,以便两个数据框具有相同的行和/或列配置。让我们尝试一个例子:
使用一些描述性的列名和玩具数据初始化两个数据框:
df1 = pd.DataFrame([[1,2,3,4], [6,7,8,9]], columns=['D', 'B', 'E', 'A'], index=[1,2])
df2 = pd.DataFrame([[10,20,30,40], [60,70,80,90], [600,700,800,900]], columns=['A', 'B', 'C', 'D'], index=[2,3,4])
现在,让我们自己查看这些数据帧:
print(df1)
D B E A 1 1 2 3 4 2 6 7 8 9
print(df2)
A B C D 2 10 20 30 40 3 60 70 80 90 4 600 700 800 900
让我们对齐这两个数据框,按列对齐(axis=1
),然后对列标签执行外部联接(join='outer'
):
a1, a2 = df1.align(df2, join='outer', axis=1)
print(a1)
print(a2)
A B C D E 1 4 2 NaN 1 3 2 9 7 NaN 6 8 A B C D E 2 10 20 30 40 NaN 3 60 70 80 90 NaN 4 600 700 800 900 NaN
这里需要注意的几件事:
df1
已重新排列,因此与中的列对齐df2
。'C'
已添加到df1
的列,以及一个标记为'E'
已添加到的列df2
。这些列已填充NaN
。这是因为我们在列标签上执行了外部联接。df2
有3
和4
,而df1
没有。这是因为我们要求对齐列(axis=1
)。如果我们在行和列上都对齐,但是将join
参数更改为,会发生'right'
什么?
a1, a2 = df1.align(df2, join='right', axis=None)
print(a1)
print(a2)
A B C D 2 9.0 7.0 NaN 6.0 3 NaN NaN NaN NaN 4 NaN NaN NaN NaN A B C D 2 10 20 30 40 3 60 70 80 90 4 600 700 800 900
注意:
df2
保留在“右侧”数据框()中找到的列和行。列'E'
不再存在。这是因为我们在列和行标签上都进行了正确的联接。2
和的行3
已添加到df1
,并用填充Nan
。这是因为我们要求对行和列(axis=None
)都进行对齐。最后,让我们使用join='inner'
和axis=1
查看问题中的代码:
a1, a2 = df1.align(df2, join='inner', axis=1)
print(a1)
print(a2)
D B A 1 1 2 4 2 6 7 9 D B A 2 40 20 10 3 90 70 60 4 900 700 600
axis=1
)。df1
并df2
保留的列标签(join='inner'
)。总而言之,DataFrame.align()
当您要确保两个数据帧之间的行和/或列的排列是相同的,而无需更改两个数据帧中包含的任何数据时,请使用此方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句