如何在Jupyter Notebook中用Python/Pandas拆分列中长度不等的逗号分隔值到多列
解决方案
你遇到的list index out of range报错,核心原因是部分行的拆分片段不符合键:值格式,拆分:后长度不足2,原有推导式没有兼容这类场景;同时原有写法没有限制冒号拆分次数,若值本身包含冒号也会触发报错。
方案1:兼容原有逻辑的修复版
逻辑易懂,适合需要自定义校验规则的场景:
import pandas as pd import numpy as np def parse_single_row(row_content): row_dict = {} # 按逗号拆分每个键值对片段 for item in row_content.split(','): # 只拆分第一个冒号,避免值中包含冒号导致拆分异常 parts = item.split(':', maxsplit=1) # 仅保留符合键:值格式的片段 if len(parts) == 2: key = parts[0].strip() value = parts[1].strip() row_dict[key] = value return row_dict list_of_dicts = [parse_single_row(x) for x in Df1['column_A']] # 生成结果表,空值统一替换为Null Df2 = pd.DataFrame.from_dict(list_of_dicts).replace({np.nan: 'Null'})
方案2:Pandas向量化实现(推荐大数据集用)
用内置字符串处理方法,无需手动循环,处理Kaggle这类大规模数据集效率更高:
import pandas as pd import numpy as np # 正则匹配所有「键:值」对,自动整理为多列 Df2 = Df1['column_A'].str.extractall(r'([^:,]+):\s*([^,]+)')\ .reset_index(level=1, drop=True)\ .set_index(0, append=True)[1]\ .unstack(0)\ .replace({np.nan: 'Null'}) # 清理列名前后空格 Df2.columns = Df2.columns.str.strip()
两种方案最终输出的表结构都和你需要的示例完全一致,所有不存在的键对应的列值都会填充为Null。
内容的提问来源于stack exchange,提问作者The Weighted Tooth
相关产品推荐
相关产品推荐

