Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。本文主要介绍一下Pandas中pandas.DataFrame.align方法的使用。

DataFrame.align(other, join='outer', axis=None, level=None, copy=True, fill_value=None, method=None, limit=None, fill_axis=0, broadcast_axis=None) 源代码

使用指定的每个轴索引的连接方法,将轴上的两个对象对齐。

参数:

other : DataFrameSeries

join : {‘outer’, ‘inner’, ‘left’, ‘right’}, 默认 ‘outer’

axis : 允许另一个对象的axis, 默认 None

对齐 index (0), columns (1), 或 both (None)

level int 或 level name, 默认 None

跨level广播,匹配传递的多索引level上的索引值

copy boolean, 默认 True

始终返回新对象。如果copy = False并且不需要重建索引,

则返回原始对象。

fill_value : scalar, 默认 np.NaN

用于缺失值的值。默认为NaN,但可以是任何“兼容”值。

method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认 None

用于reindexed Series pad的填充孔的方法/ffill:

将最后有效观察向前传播到下一个有效backfill / bfill:

使用NEXT有效观察来填补空白

limit : int, 默认 None

如果指定了method,则这是向前/向后填充的连续NaN值的最大数量。

换句话说,如果存在超过此数量的连续NaN的间隙,

则仅部分填充。如果未指定method,

则这是沿整个轴填充NaN的最大条目数。

如果不是None,则必须大于0。

fill_axis : {0 or ‘index’, 1 or ‘columns’}, 默认 0

Filling axis, method 或 limit

broadcast_axis : {0 或 ‘index’, 1 或 ‘columns’}, 默认 None

如果对齐两个不同尺寸的对象,则沿此axis广播值

返回:

(left, right) : (DataFrame,其他类型)

对齐的对象

例如

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

对齐这两个DataFrame,按列对齐(align=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

参数改为join='outer'和axis=None

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

参数改为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