pandas 的 align() 对象方法可以将两个 DataFrame 和 Series 数据对齐,对齐可以按指定的轴进行,还可以指定连接方式。
df = pd.DataFrame(
[[1, 2, 3, 4],
[6, 7, 8, 9]],
columns=["D", "B", "E", "A"],
index=[1, 2]
other = pd.DataFrame(
[[10, 20, 30, 40], [60, 70, 80, 90], [600, 700, 800, 900]],
columns=["A", "B", "C", "D"],
index=[2, 3, 4],
D B E A
1 1 2 3 4
2 6 7 8 9
other
A B C D
2 10 20 30 40
3 60 70 80 90
4 600 700 800 900
我们定义了两个 DataFrame,下面按列对齐:
left, right = df.align(other, join="outer", axis=1)
A B C D E
1 4 2 NaN 1 3
2 9 7 NaN 6 8
right
A B C D E
2 10 20 30 40 NaN
3 60 70 80 90 NaN
4 600 700 800 900 NaN
对齐操作返回两个 DataFrame,分别是左右两个原数据上将对齐对方数据有自己没有的数据以缺失值形式填充,同时保持自己数据的长度(因为我们指定 axis=1 按列对齐)。
我们也可以在索引上对齐:
left, right = df.align(other, join="outer", axis=0)
D B E A
1 1.0 2.0 3.0 4.0
2 6.0 7.0 8.0 9.0
3 NaN NaN NaN NaN
4 NaN NaN NaN NaN
right
A B C D
1 NaN NaN NaN NaN
2 10.0 20.0 30.0 40.0
3 60.0 70.0 80.0 90.0
4 600.0 700.0 800.0 900.0
最后,默认的 axis=None 将在索引和列上对齐:
left, right = df.align(other, join="outer", axis=None)
A B C D E
1 4.0 2.0 NaN 1.0 3.0
2 9.0 7.0 NaN 6.0 8.0
3 NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN
right
A B C D E
1 NaN NaN NaN NaN NaN
2 10.0 20.0 30.0 40.0 NaN
3 60.0 70.0 80.0 90.0 NaN
4 600.0 700.0 800.0 900.0 NaN
Series 也支持这些操作,不过 axis 参数是固定的,不需要额外指定。
通过上边的示例,我们总结 align() 对象方法的语法为:
align(self, other, join: 'str' = 'outer',
axis: 'Axis | None' = None,
level: 'Level | None' = None,
copy: 'bool' = True, fill_value=None,
method: 'str | None' = None, limit=None,
fill_axis: 'Axis' = 0,
broadcast_axis: 'Axis | None' = None) -> 'DataFrame'
other : DataFrame or Series,要对齐的对象
join : {'outer', 'inner', 'left', 'right'}, 默认 'outer',对齐时的连接方式
axis : 另一个对象对齐轴, 默认为 None,行列同时对齐,可选 0 或者 1
level : int or level 名称, 默认 None,在一个级别上广播,匹配通过多索引级别。
copy : bool, 默认 True,总是返回新对象。如果copy=False 且不需要重新索引然后返回原始对象。
fill_value : scalar, 默认 np.NaN,用于填充缺失值的值。默认为 NaN,但可以是任意值
“兼容”值。
method : {'backfill', 'bfill', 'pad', 'ffill', None}, 默认 None。用于填充缺失值的方法: