如何用Pandas创建带组合列名的DataFrame并拆分单元格数据?
Pandas处理分号分隔单元格并拆分多列完整实现
步骤1:读取Excel文件
首先用pandas.read_excel读取目标文件,生成初始DataFrame:
import pandas as pd # 读取Excel文件,替换为你的文件路径 df = pd.read_excel("your_target_file.xlsx")
步骤2:基础拆分逻辑(非嵌套字符串)
避免循环遍历单元格(效率低下),直接用Pandas矢量化字符串操作完成拆分,并自动生成规范列名:
# 定义分隔符 separator = ";" # 遍历每一列进行处理 for col in df.columns: # 将单元格转为字符串后拆分,expand=True直接将拆分结果转为多列DataFrame split_result = df[col].astype(str).str.split(separator, expand=True) # 给拆分后的列命名:原列名_1、原列名_2... split_result.columns = [f"{col}_{i+1}" for i in split_result.columns] # 将拆分后的列合并回原DataFrame df = pd.concat([df, split_result], axis=1) # 可选:如果不需要保留原列,执行下方代码删除 # df = df.drop(columns=df.columns[:len(df.columns)//2])
步骤3:嵌套格式处理(针对[[[A;B;C], [D;E]]]类内容)
如果单元格是带嵌套括号的字符串,先清洗冗余字符再拆分:
import re # 清洗嵌套字符串:移除所有括号和空格 def clean_nested_str(s): s = str(s) # 正则替换掉所有括号和空白字符 return re.sub(r'[\[\]\s]', '', s) # 遍历列处理 for col in df.columns: # 先清洗单元格内容 cleaned_series = df[col].apply(clean_nested_str) # 拆分并生成新列 split_result = cleaned_series.str.split(separator, expand=True) split_result.columns = [f"{col}_{i+1}" for i in split_result.columns] # 合并到原DataFrame df = pd.concat([df, split_result], axis=1)
效果示例
假设原DataFrame为:
| column_name1 | column_name2 |
|---|---|
| A;B;C | D;E |
| F;G | H;I;J |
处理后生成的结果:
| column_name1 | column_name2 | column_name1_1 | column_name1_2 | column_name1_3 | column_name2_1 | column_name2_2 | column_name2_3 |
|---|---|---|---|---|---|---|---|
| A;B;C | D;E | A | B | C | D | E | NaN |
| F;G | H;I;J | F | G | NaN | H | I | J |
空缺位置会自动填充NaN,完全匹配“按顺序填充数据”的需求。
内容的提问来源于stack exchange,提问作者samuhanaaidra
相关产品推荐
相关产品推荐

