首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫对齐()功能:举例说明

熊猫对齐()功能:举例说明
EN

Stack Overflow用户
提问于 2018-08-02 03:47:14
回答 1查看 28.5K关注 0票数 39

我遇到了这一行代码

代码语言:javascript
复制
app_train_poly, app_test_poly = app_train_poly.align(app_test_poly, join = 'inner', axis = 1)

这里,app_train_poly和app_test_poly是熊猫的数据。

我知道,使用align(),您可以对这两个数据文件进行某种形式的组合,但我无法想象它实际上是如何工作的。

我搜索了这些文档,但找不到任何说明性的例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-02 04:32:55

您所处的轨道是正确的,只不过DataFrame.align没有组合两个数据文件,而是对齐了两个数据文件,以便使两个数据文件具有相同的行和/或列配置。让我们尝试一个例子:

用一些描述性列名和玩具数据初始化两个数据文件:

代码语言:javascript
复制
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])

现在,让我们单独查看这些数据框架:

代码语言:javascript
复制
print(df1)

D B E A 1 1 2 3 4 2 6 7 8 9

代码语言:javascript
复制
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')上执行外部连接:

代码语言:javascript
复制
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。这是因为我们在列标签上执行了一个外部联接。
  • DataFrames中的任何一个值都没有被更改。
  • 注意,行标签没有对齐;df2有行34,而df1没有。这是因为我们请求对列(axis=1)进行对齐。

如果我们在行和列上对齐,但将join参数更改为'right',会发生什么?

代码语言:javascript
复制
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

请注意:

  • 只保留在“右”数据rows (df2)中找到的列和行。列'E'不再存在。这是因为我们在列标签和行标签上都做了正确的连接。
  • 带有标签34的行已经添加到df1中,填充了Nan。这是因为我们请求对行和列(axis=None)进行对齐。
  • 行标签现在和列标签对齐了。
  • 同样,请注意,数据文件中的任何实际值都没有被更改。

最后,让我们看看问题中的代码,使用join='inner'axis=1

代码语言:javascript
复制
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)。
  • 只保留df1df2中同时存在的列标签(join='inner')。

总之,当您希望确保两个数据文件之间的行和/或列排列是相同的时,请使用DataFrame.align(),而不需要更改两个数据文件中包含的任何数据。

票数 110
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51645195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档