如何在Pandas DataFrame中拆分分号分隔的键值对列
解决Pandas拆分分号分隔键值对列的错位问题
你的问题出在直接按分号拆分后转成DataFrame是按位置分配列,完全忽略了键的对应关系,自然会出现错位和无对应列名的情况。正确的做法是先把每行的INFO字符串解析成字典(键值对应),再转换成结构化的DataFrame。
具体实现步骤
- 编写解析函数:处理每行INFO内容,将分号分隔的元素转为键值对,无
=的项(比如IMPRECISE)可以设为True或空值,按需调整。 - 将INFO列批量解析为字典列表,再转为DataFrame。
- 和原DataFrame拼接,得到最终结果。
完整代码示例
import pandas as pd # 读取原始数据 df_checknew = pd.read_excel("annotated.xlsx") # 解析INFO字符串为字典的函数 def parse_info(info_str): # 拆分并去除空元素和首尾空格 items = [item.strip() for item in info_str.split(';') if item.strip()] info_dict = {} for item in items: if '=' in item: # 只拆分一次,避免值中包含=的情况 key, value = item.split('=', 1) info_dict[key.strip()] = value.strip() else: # 处理无值的标记,比如IMPRECISE,这里设为True,也可以设为''或NaN info_dict[item.strip()] = True return info_dict # 解析INFO列为字典,再转为结构化DataFrame df_info = df_checknew['INFO'].apply(parse_info).apply(pd.Series) # 和原DataFrame拼接(去掉原INFO列避免重复) df_final = pd.concat([df_checknew.drop('INFO', axis=1), df_info], axis=1) # 可选:将空值填充为空字符串 df_final = df_final.fillna('')
效果说明
运行后每个键会自动成为独立列,对应行的正确值会填充到列中,没有该键的行则显示空值(或你设置的默认值),彻底解决错位和列名缺失问题。
内容的提问来源于stack exchange,提问作者Atom
相关产品推荐
相关产品推荐

