gpt4 book ai didi

python - 如何比较忽略列名的两个数据框?

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:33 25 4
gpt4 key购买 nike

假设我想比较两个数据框的内容,而不是列名(或索引名)。 是否可以在不重命名列的情况下实现这一点?

例如:

df = pd.DataFrame({'A': [1,2], 'B':[3,4]})
df_equal = pd.DataFrame({'a': [1,2], 'b':[3,4]})
df_diff = pd.DataFrame({'A': [1,2], 'B':[3,5]})

在这种情况下,dfdf_equal 但不同于 df_diff,因为 df_equal 中的值具有相同的内容,但在 df_diff 中。请注意,df_equal 中的列名称不同,但我仍想获得真实值。

我尝试了以下方法:

等于:

# Returns false because of the column names
df.equals(df_equal)

均衡:

# doesn't work as it compares four columns (A,B,a,b) assuming nulls for the one that doesn't exist
df.eq(df_equal).all().all()

pandas.testing.assert_frame_equal:

# same as equals
pd.testing.assert_frame_equal(df, df_equal, check_names=False)

我认为可以使用 assert_frame_equal,但 parameters 都不是似乎可以忽略列名。

最佳答案

pd.DataFrame 是围绕 pd.Series 构建的,因此您不太可能在没有列名的情况下执行比较。

但最有效的方法是下拉到 numpy:

assert_equal = (df.values == df_equal.values).all()

要处理np.nan,您可以使用np.testing.assert_equal 并捕获AssertionErroras suggested by @Avaris :

import numpy as np

def nan_equal(a,b):
try:
np.testing.assert_equal(a,b)
except AssertionError:
return False
return True

assert_equal = nan_equal(df.values, df_equal.values)

关于python - 如何比较忽略列名的两个数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49233359/

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