如何将DataFrame中单列字符串按内置标签拆分为多列?
解决方法:拆分带标签的单列DataFrame为多列(自动补NA)
假设你的原始DataFrame结构如下(模拟示例):
import pandas as pd df = pd.DataFrame({ 'raw_data': [ 'A:100,200;B:300;C:400,500,600', 'A:700;B:800,900;C:1000', 'B:1100;C:1200,1300,1400,1500' ] })
步骤1:编写解析函数,提取标签与对应bp值列表
先写一个函数,把每行的字符串转换成标签为键、bp值列表为值的字典:
def parse_raw_string(s): # 按分号分割不同标签组 tag_groups = s.split(';') result = {} for group in tag_groups: # 分割标签和对应的bp值字符串 tag, bp_str = group.split(':') # 把bp值字符串转成整数列表 bp_values = list(map(int, bp_str.split(','))) result[tag] = bp_values return result
步骤2:将每行解析结果转为Series并合并
利用apply处理每行数据,再用pd.concat合并所有行的Series,自动补全缺失值为NaN:
# 解析每行数据,生成Series列表 series_list = df['raw_data'].apply(lambda x: pd.Series(parse_raw_string(x))) # 合并成最终DataFrame final_df = pd.concat(series_list.to_list(), axis=1).T.reset_index(drop=True)
最终效果
运行后final_df的结构如下:
| A | B | C | C.1 | C.2 | C.3 | |
|---|---|---|---|---|---|---|
| 0 | 100.0 | 300.0 | 400.0 | 500.0 | 600.0 | NaN |
| 1 | 700.0 | 800.0 | 1000.0 | NaN | NaN | NaN |
| 2 | NaN | 1100.0 | 1200.0 | 1300.0 | 1400.0 | 1500.0 |
如果需要把同标签的列名统一(比如把C.1/C.2改成C_1/C_2),可以额外处理:
# 重命名列,把同标签的列按序号标注 final_df.columns = [f'{col.split(".")[0]}_{int(col.split(".")[1])+1}' if '.' in col else col for col in final_df.columns]
处理后列名变为A, B, C, C_1, C_2, C_3,更直观。
内容的提问来源于stack exchange,提问作者DHeltberg
相关产品推荐
相关产品推荐

