如何拆分Pandas DataFrame逗号分隔行,保留单行数据并解决NaN问题
问题原因
原代码失效的核心原因是:当From/To列的单元格为数值类型(而非字符串),或单元格值无逗号时,str.split(',')会返回NaN或非列表结构,后续explode操作直接将这些行转为NaN。
解决方案
1. 基础修复:避免NaN产生
先将列统一转为字符串类型,再用str.split(',', expand=False)拆分——该参数确保无逗号的单元格也返回包含单个元素的列表,从根源避免NaN:
# 转为字符串类型,消除数值类型导致的str操作异常 DT['From'] = DT['From'].astype(str) DT['To'] = DT['To'].astype(str) # 拆分列,确保所有单元格都是列表格式 DT['From'] = DT['From'].str.split(',', expand=False) DT['To'] = DT['To'].str.split(',', expand=False) # 展开行,保留单个值的行不变 DT = DT.explode(['From', 'To'], ignore_index=True)
2. 按需选择拆分逻辑
- 一一对应拆分:如果
From和To的多值是成对出现的(比如From="1,2"对应To="3,4",需拆成1→3、2→4),直接使用上面的explode(['From', 'To'])即可。 - 笛卡尔积拆分:如果需要
From的每个值分别匹配To的每个值,可按顺序展开:
DT = DT.explode('To', ignore_index=True).explode('From', ignore_index=True)
3. 可选:清理空白字符
若原数据中逗号后带空格(如"1, 2"),拆分后可清理元素前后空格:
DT['From'] = DT['From'].str.strip() DT['To'] = DT['To'].str.strip()
内容的提问来源于stack exchange,提问作者user1574881
相关产品推荐
相关产品推荐

