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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:17:47