为何初始化方式不同但内容相同的DataFrame.equals()返回False?
为什么两个看似相同的空DataFrame相等性测试返回False?
先看复现代码:
import pandas as pd df1 = pd.DataFrame(columns=["A"]) df2 = pd.DataFrame({"A": []}) print(df1) print(df2) print(df1.equals(df2))
执行后输出:
Empty DataFrame Columns: [A] Index: [] Empty DataFrame Columns: [A] Index: [] False
核心原因:列的数据类型不匹配
这两个空DataFrame看起来结构一致,但equals()方法返回False的本质是列"A"的数据类型不同:
df1是通过指定列名创建的空DataFrame,pandas会默认给列设置object类型(无数据时的通用默认类型)。df2是通过字典传入空列表创建的,空列表在pandas中会被推断为float64类型(空数值序列的默认类型)。
你可以通过dtypes属性直接验证:
print(df1.dtypes) # A object # dtype: object print(df2.dtypes) # A float64 # dtype: object
equals()方法会严格校验数据类型的一致性,哪怕内容和结构看起来完全一样,只要类型不匹配就会返回False。
让两者相等的解决方法
显式指定统一的数据类型即可:
# 方法1:给df1指定float64类型 df1 = pd.DataFrame(columns=["A"], dtype="float64") df2 = pd.DataFrame({"A": []}) print(df1.equals(df2)) # 输出True # 方法2:给df2指定object类型 df1 = pd.DataFrame(columns=["A"]) df2 = pd.DataFrame({"A": []}, dtype="object") print(df1.equals(df2)) # 输出True
内容的提问来源于stack exchange,提问作者jvisprime
相关产品推荐
相关产品推荐

