如何根据文本内容拆分Pandas DataFrame单列至多列?
Pandas单列拆分多列问题解决
问题场景
现有一个含单列的Pandas DataFrame,数据如下:
id text_col 1 Was it Accurate?: Yes\n\nReasoning: This is a sample text 2 Was it Accurate?: Yes\n\nReasoning: This is a sample text 3 Was it Accurate?: No\n\nReasoning: This is a sample text
需要将text_col拆分为Was it Accurate?和Reasoning两列,最终目标格式:
id Was it Accurate? Reasoning 1 Yes This is a sample text 2 Yes This is a sample text 3 No This is a sample text
尝试使用"\n\nReasoning:"拆分未得到预期结果,代码如下:
df[['Was it Accurate?','Reasoning']] = df['text_col'].str.split("\n\nReasoning:")
问题原因
当前拆分仅将文本从\n\nReasoning:处截断,但第一列仍保留了Was it Accurate?: 前缀,所以无法直接得到目标值。
解决方案
方法1:分步拆分+前缀清理
先拆分出两部分,再移除第一列的冗余前缀:
# 按Reasoning分隔符拆分,expand=True确保返回DataFrame df[['Was it Accurate?', 'Reasoning']] = df['text_col'].str.split('\n\nReasoning:', expand=True) # 替换掉第一列的固定前缀 df['Was it Accurate?'] = df['Was it Accurate?'].str.replace('Was it Accurate?: ', '')
方法2:正则表达式提取(推荐)
直接用正则匹配提取目标内容,一步到位:
# 用正则分组提取两个字段的内容 df[['Was it Accurate?', 'Reasoning']] = df['text_col'].str.extract(r'Was it Accurate?: (.*?)\n\nReasoning: (.*)')
正则说明:
(.*?):非贪婪匹配Was it Accurate?:后的内容(即Yes/No)(.*):匹配\n\nReasoning:后的所有文本内容
内容的提问来源于stack exchange,提问作者Shubham R
相关产品推荐
相关产品推荐

