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

如何将pandas DataFrame列的多值单元格拆分到独立行

pandas多列有序同步拆分实现方案

现有代码问题说明

  • 第二种方案核心错误:调用pd.read_csv时误将文件路径字符串通过io.StringIO当成文件内容读取,导致返回空DataFrame
  • 第一种方案仅处理单列,没有对business列做对应拆分,无法实现多列同步映射

实现代码

依赖导入

import pandas as pd
import glob
from pathlib import Path

核心拆分函数

def split_multi_columns(df):
    # 拆分name列为列表,自动忽略逗号前后的空格
    df['name'] = df['name'].str.split(r'\s*,\s*')
    # 按规则拆分business列,保证拆分后的列表长度和name列完全对应
    df['business'] = df['business'].str.extractall(r"(?:[\s,]*)(.*?(?:Unspecified|employees|Self-employed))").groupby(level=0).agg(list)
    # 多列同步拆分生成独立行,其余列自动保留原值
    df = df.explode(['name', 'business'], ignore_index=True)
    return df

批量文件处理逻辑

review_path = r'data/base_data'
review_files = glob.glob(review_path + "/*.csv")

for review_file in review_files:
    # 修正读取逻辑,直接读取本地csv文件,分隔符根据实际文件格式调整
    df = pd.read_csv(review_file, sep=',')
    df = split_multi_columns(df)
    # 输出处理后文件,默认添加processed_前缀避免覆盖原始文件
    out_put_path = Path(review_path) / f'processed_{Path(review_file).name}'
    df.to_csv(out_put_path, index=False)
    print(f'文件处理完成:{review_file}')
    print(df.head())

逻辑说明

  • 正则匹配规则保证business列拆分后的列表长度和name列拆分后的列表长度完全一致,explode时会按顺序一一对应,不会出现错位
  • 无需拆分的列会自动在拆分生成的所有新行中保留原始值
  • 如果需要新增其他需要同步拆分的列,只需在函数中补充对应拆分逻辑,再把列名加入explode的参数列表即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:57:03