如何将DataFrame中一列的字符串转换为多列?含表格格式需求
把DataFrame单列字符串拆分为多列的实现方法
嘿,我来帮你搞定这个需求!把DataFrame里某一列的字符串拆成多列是pandas日常操作里的高频场景,我分几种最常见的情况给你讲,你可以对着自己的数据套:
1. 有固定分隔符的情况(最常用!)
如果你的字符串是用逗号、空格、竖线这类固定符号分隔的,直接用str.split()加expand=True就能一步到位。
举个栗子,假设你的原始DataFrame长这样:
import pandas as pd df = pd.DataFrame({ '用户信息': ['张三,25,北京', '李四,30,上海', '王五,28,广州'] })
执行拆分代码:
# 按逗号拆分,expand=True会直接把拆分结果转成新的DataFrame split_result = df['用户信息'].str.split(',', expand=True) # 给新列起个好懂的名字 split_result.columns = ['姓名', '年龄', '城市'] # 把拆分后的列和原表合并(如果不需要原列可以删掉) final_df = pd.concat([df, split_result], axis=1) # 可选:删除原始列 # final_df = final_df.drop('用户信息', axis=1)
执行后你就能得到带姓名、年龄、城市三列的新DataFrame啦~
2. 用正则提取固定格式的字符串
如果你的字符串是带标识的(比如姓名:张三 年龄:25)或者有固定格式的,用str.extract()配合正则表达式更灵活。
比如原始数据是这样:
df = pd.DataFrame({ '用户信息': ['姓名:张三 年龄:25 城市:北京', '姓名:李四 年龄:30 城市:上海'] })
用正则提取分组:
# 正则里的()就是我们要提取的内容,依次对应新列 df[['姓名', '年龄', '城市']] = df['用户信息'].str.extract(r'姓名:(\S+) 年龄:(\d+) 城市:(\S+)')
这里\S+匹配非空白字符,\d+匹配数字,你可以根据自己的字符串格式调整正则表达式哦。
3. 处理JSON格式的字符串
如果你的列里是JSON格式的字符串,用json_normalize来展开最方便:
import json from pandas import json_normalize df = pd.DataFrame({ '用户信息': ['{"姓名":"张三","年龄":25,"城市":"北京"}', '{"姓名":"李四","年龄":30,"城市":"上海"}'] }) # 先把JSON字符串转成字典格式 df['用户信息'] = df['用户信息'].apply(json.loads) # 把字典展开成多列 expanded_df = json_normalize(df['用户信息']) # 合并到原表 final_df = pd.concat([df, expanded_df], axis=1)
一些小提醒:
- 如果拆分后有的行内容数量不一致,
expand=True会自动补NaN,你可以用fillna()来处理缺失值 - 如果分隔符是多个(比如多个空格),可以用正则匹配:
str.split(r'\s+', expand=True) - 拆分后的列默认是
object类型,记得转成对应的数据类型,比如年龄列转成整数:final_df['年龄'] = final_df['年龄'].astype(int)
内容的提问来源于stack exchange,提问作者sqlerr
相关产品推荐
相关产品推荐

