Pandas Merge合并后CSV列数据偏移错位问题求助
解决Pandas Merge后CSV列错位及匹配过滤问题
一、列错位问题排查与解决
CSV列错位大概率是原始文件格式脏数据或匹配列清洗不到位导致,按以下步骤处理:
清洗匹配列的冗余字符
匹配列Desc和if如果存在前后空格、换行符,会导致匹配失败,出现大量NaN,视觉上表现为右侧列内容偏移。合并前先做清洗:import pandas as pd # 读取CSV时指定基础参数避免解析异常 df_ifOperStatus = pd.read_csv('WG_ifOperStatus.csv', sep=',', skip_blank_lines=True, encoding='utf-8') df_IfDescr = pd.read_csv('TEST_ifDescr.csv', sep=',', skip_blank_lines=True, encoding='utf-8') # 去除匹配列的前后空格、换行符 df_IfDescr['Desc'] = df_IfDescr['Desc'].str.strip().str.replace('\n', '').str.replace('\r', '') df_ifOperStatus['if'] = df_ifOperStatus['if'].str.strip().str.replace('\n', '').str.replace('\r', '')检查原始CSV格式
打开原始文件确认是否存在单元格内换行、分隔符混用(比如同时用逗号和制表符)的情况。如果是分隔符问题,在pd.read_csv中指定正确的sep参数,例如sep='\t'或sep=';'。
二、实现匹配过滤需求
你需要过滤掉if列中不在Desc列内的内容,用merge方法可按以下两种场景实现:
场景1:保留左表(df_IfDescr)所有行,仅保留右表中匹配成功的行
先过滤右表,再执行左连接:
# 过滤右表:仅保留if值存在于Desc列中的行 filtered_right = df_ifOperStatus[df_ifOperStatus['if'].isin(df_IfDescr['Desc'])] # 左合并,确保右表仅输出匹配内容 merge_result = df_IfDescr.merge(filtered_right, left_on='Desc', right_on='if', how='left') # 导出时指定编码避免乱码 merge_result.to_csv('MergeTEST.csv', index=False, encoding='utf-8')
场景2:仅保留左右表匹配成功的行
直接使用内连接即可,自动过滤两边未匹配的行:
merge_result = df_IfDescr.merge(df_ifOperStatus, left_on='Desc', right_on='if', how='inner') merge_result.to_csv('MergeTEST.csv', index=False, encoding='utf-8')
三、结果验证
导出后可先通过print(merge_result.head(20))和merge_result.info()查看列数、非空值数量,确认匹配逻辑是否生效,再打开CSV检查列对齐情况。
内容的提问来源于stack exchange,提问作者Nuclear7740
相关产品推荐
相关产品推荐

