Pandas:如果索引在合并或合并时不匹配会引发错误?

fzsnzjdm  于 2023-04-04  发布在  其他
关注(0)|答案(1)|浏览(192)

我想连接(按索引)或合并两个pandas DataFrames。但是,如果两个DataFrames不共享相同的索引(可能是MultiIndex),我希望此操作失败。
pandas是否提供了一种在组合此类数据集时声明这一点的方法?
例如:

import numpy as np
import pandas as pd

rng = np.random.default_rng(42)
df1 = pd.DataFrame({'A': rng.integers(0, 10, size=3)}, index=['a', 'b', 'c'])
df2 = pd.DataFrame({'B': rng.integers(0, 10, size=3)}, index=['a', 'b', 'd'])
pd.merge(df1, df2, left_index=True, right_index=True)
A    B
a  0.0  0.0
b  7.0  6.0
c  6.0  NaN
d  NaN  2.0

我希望这会引发一个错误,因为索引不匹配。
pandas的合并函数(merge、concat、join等)是否提供了任何类型的索引检查?

mdfafbf1

mdfafbf11#

你可以挂接方法(或函数):

real_merge = pd.DataFrame.merge
def fake_merge(left, right, *args, **kwargs):
    assert set(left.index) == set(right.index), 'Indexes are different'
    return real_merge(left, right, *args, **kwargs)
pd.DataFrame.merge = fake_merge
pd.merge = fake_merge

免责声明:这只是为了演示的目的,我认为你不应该在生产中使用这些代码。你可以在合并,concat,join,...之前保留assert的想法。

试试看:

>>> pd.merge(df1, df2, left_index=True, right_index=True)
...
AssertionError: Indexes are different

>>> df1.merge(df2, left_index=True, right_index=True)
...
AssertionError: Indexes are different

相关问题