You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出并对比两个DataFrame的列数据类型及找出不匹配列

DataFrame列数据类型对比与不匹配列排查

1. 按数据类型分组列出DataFrame的列(兼容geometry类型)

直接用df.dtypes作为分组键可能在遇到geometry等自定义类型时报错,将数据类型转为字符串后再分组即可解决:

# 处理df1,按数据类型分组列
df1_type_groups = df1.columns.to_series().groupby(df1.dtypes.astype(str)).groups
print("=== df1 各数据类型对应列 ===")
for dtype, cols in df1_type_groups.items():
    print(f"{dtype}: {list(cols)}")

# 同理处理df2
df2_type_groups = df2.columns.to_series().groupby(df2.dtypes.astype(str)).groups
print("\n=== df2 各数据类型对应列 ===")
for dtype, cols in df2_type_groups.items():
    print(f"{dtype}: {list(cols)}")

2. 找出两DataFrame数据类型不匹配的列

由于两DataFrame列名完全匹配,直接遍历列名对比对应列的数据类型即可:

# 存储不匹配的列信息(列名、df1类型、df2类型)
mismatched_cols = []

# 遍历所有列对比类型
for col in df1.columns:
    dtype_df1 = str(df1[col].dtype)
    dtype_df2 = str(df2[col].dtype)
    if dtype_df1 != dtype_df2:
        mismatched_cols.append((col, dtype_df1, dtype_df2))

# 输出结果
print("\n=== 数据类型不匹配的列 ===")
for col, dt1, dt2 in mismatched_cols:
    print(f"列 {col}: df1 类型为 {dt1},df2 类型为 {dt2}")

完整示例(针对你的场景)

import pandas as pd
from shapely.geometry import Point
import geopandas as gpd

# 构造示例df1
data1 = {
    'Geometry': [Point(1,2), Point(3,4)],
    'A': [1, 2],
    'B': ['x', 'y']
}
df1 = gpd.GeoDataFrame(data1, geometry='Geometry')

# 构造示例df2(A列为字符串类型,与df1不匹配)
data2 = {
    'Geometry': [Point(5,6), Point(7,8)],
    'A': ['1', '2'],
    'B': ['x', 'y']
}
df2 = gpd.GeoDataFrame(data2, geometry='Geometry')

# 按类型分组列
df1_type_groups = df1.columns.to_series().groupby(df1.dtypes.astype(str)).groups
print("=== df1 各数据类型对应列 ===")
for dtype, cols in df1_type_groups.items():
    print(f"{dtype}: {list(cols)}")

df2_type_groups = df2.columns.to_series().groupby(df2.dtypes.astype(str)).groups
print("\n=== df2 各数据类型对应列 ===")
for dtype, cols in df2_type_groups.items():
    print(f"{dtype}: {list(cols)}")

# 查找不匹配列
mismatched_cols = []
for col in df1.columns:
    dt1 = str(df1[col].dtype)
    dt2 = str(df2[col].dtype)
    if dt1 != dt2:
        mismatched_cols.append((col, dt1, dt2))

print("\n=== 数据类型不匹配的列 ===")
for col, dt1, dt2 in mismatched_cols:
    print(f"列 {col}: df1 类型为 {dt1},df2 类型为 {dt2}")

运行结果

=== df1 各数据类型对应列 ===
geometry: ['Geometry']
int64: ['A']
object: ['B']

=== df2 各数据类型对应列 ===
geometry: ['Geometry']
object: ['A', 'B']

=== 数据类型不匹配的列 ===
列 A: df1 类型为 int64,df2 类型为 object

内容的提问来源于stack exchange,提问作者ashnaa1610

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:43:24