我遇到了这一行代码
app_train_poly, app_test_poly = app_train_poly.align(app_test_poly, join = 'inner', axis = 1)这里,app_train_poly和app_test_poly是熊猫的数据。
我知道,使用align(),您可以对这两个数据文件进行某种形式的组合,但我无法想象它实际上是如何工作的。
我搜索了这些文档,但找不到任何说明性的例子。
发布于 2018-08-02 04:32:55
您所处的轨道是正确的,只不过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'不再存在。这是因为我们在列标签和行标签上都做了正确的连接。3和4的行已经添加到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(),而不需要更改两个数据文件中包含的任何数据。
https://stackoverflow.com/questions/51645195
复制相似问题