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

Pandas合并完整交通DataFrame仅获4行,合并部分列却正常的问题求助

问题原因及排查方案

出现这种差异的核心原因是完整交通数据与你的临床数据集在census_tract列的匹配度极低,而你之前提取的两列数据是经过筛选(或格式修正)的,能完全匹配原数据的普查区代码。具体可能的原因及排查步骤如下:

1. 数据类型不匹配(最常见)

普查区代码通常是带前导零的字符串(比如"00123"),但完整交通数据的census_tract可能被Excel自动转成了数值类型(丢失前导零变成123),导致和原数据的字符串类型代码无法匹配,只有少数刚好不带前导零的代码能成功匹配(也就是你看到的4行)。

排查&修复:

检查两列的数据类型并统一为字符串:

# 转换为字符串并去除可能的空格
df_my_data['census_tract'] = df_my_data['census_tract'].astype(str).str.strip()
df_transportation_data['census_tract'] = df_transportation_data['census_tract'].astype(str).str.strip()

# 重新执行合并
df_merged_file = pd.merge(df_my_data, df_transportation_data, on=['census_tract'])

2. 完整交通数据的census_tract仅包含4个与原数据重叠的普查区

你之前提取的两列数据可能是手动筛选过的(比如只导出了和你的临床数据匹配的行),但完整交通数据本身的普查区覆盖范围极小,只有4个代码和你的657行数据重叠,所以内连接(默认的merge方式)后只保留4行。

排查:

查看完整交通数据中与原数据匹配的普查区数量:

# 获取原数据的普查区集合
my_tracts = set(df_my_data['census_tract'].astype(str).str.strip())
# 筛选交通数据中匹配的行
matched_rows = df_transportation_data[df_transportation_data['census_tract'].astype(str).str.strip().isin(my_tracts)]

# 输出匹配信息
print(f"交通数据中与原数据匹配的普查区数量:{len(matched_rows['census_tract'].unique())}")
print(f"交通数据中匹配的总行数:{len(matched_rows)}")

如果输出的匹配普查区数量是4,说明确实只有这4个重叠的代码。

3. 完整交通数据存在脏数据

比如部分行的census_tract是空值、NaN或格式错误(如带特殊字符),导致大部分行无法参与匹配。而你提取的两列数据已经过滤了这些脏数据。

排查:

检查交通数据中census_tract的空值或异常值:

# 查看空值数量
print(f"交通数据中census_tract空值数量:{df_transportation_data['census_tract'].isna().sum()}")
# 查看非字符串类型的异常值(如果已转字符串则跳过)
print(f"交通数据中census_tract非字符串值数量:{len(df_transportation_data[~df_transportation_data['census_tract'].apply(lambda x: isinstance(x, str))])}")

补充:调整合并方式

如果你想保留原数据的所有657行(即使没有匹配的交通数据),可以使用左连接:

df_merged_file = pd.merge(df_my_data, df_transportation_data, on=['census_tract'], how='left')

此时未匹配的交通数据列会显示NaN,方便后续处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:54:53