gpt4 book ai didi

python - Pandas 对齐()函数: illustrative example

转载 作者:太空狗 更新时间:2023-10-29 21:17:07 30 4
gpt4 key购买 nike

我遇到了这行代码

app_train_poly, app_test_poly = app_train_poly.align(app_test_poly, join = 'inner', axis = 1)

此处 app_train_polyapp_test_poly 是 Pandas 数据框。

我知道使用 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 填充。这是因为我们对列标签执行了外部联接。
  • DataFrame 中的所有值都没有被改变。
  • 注意行标签没有对齐; df2 有行 34,而 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' 列不再存在。这是因为我们对列和行标签进行了右连接。
  • 带有标签 34 的行已添加到 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)。
  • 仅保留同时出现在 df1df2 中的列标签 (join='inner')。

总而言之,当您想要确保行和/或列的排列在两个数据帧之间相同,而不改变两个数据帧中包含的任何数据时,请使用 DataFrame.align()数据框。

关于python - Pandas 对齐()函数: illustrative example,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51645195/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com