Python-Pandas:移除冗余字符串并拆分至两列的技术需求
拆分Pandas含冗余转义换行符的列为两列
问题场景
你有一列Pandas数据,每条记录格式如下:
John Doe\n \n\n \n\n \nBlack Jane Doe\r\n\n \r\n\n \r\n\n \r\nViolet
需要将其拆分为两列,分别存储姓名和最终的目标值,示例结果:
| Column A | Column B |
|---|---|
| John Doe | Black |
| Jane Doe | Violet |
你尝试使用df['column'].str.replace('\(.*$', '')时,出现SyntaxError: unterminated string literal错误,以下是解决方案:
错误原因
你的代码出现语法错误是因为:
- Python字符串中,单个
\会被视为转义字符,直接写'\(.*$'会导致解析错误(\(被当作未完成的转义); - 正则表达式逻辑不符合需求:
\(是匹配左括号,但你的数据中不存在括号,无法正确匹配冗余内容。
解决方案
方法1:正则提取(推荐)
利用str.extract直接提取姓名和目标值,正则匹配开头的姓名(由两个单词组成),跳过中间所有换行、空格等冗余内容,最后提取末尾的目标单词:
import pandas as pd # 示例数据 data = { 'column': [ 'John Doe\n \n\n \n\n \nBlack', 'Jane Doe\r\n\n \r\n\n \r\n\n \r\nViolet' ] } df = pd.DataFrame(data) # 提取两列 df[['Column A', 'Column B']] = df['column'].str.extract(r'^(\w+\s\w+)\s*[\n\r\s]+(\w+)$') # 查看结果 print(df[['Column A', 'Column B']])
方法2:拆分后处理
先按换行符拆分字符串,取第一个元素作为姓名,取最后一个元素作为目标值(需清理空格):
df['Column A'] = df['column'].str.split(r'[\n\r]').str[0].str.strip() df['Column B'] = df['column'].str.split(r'[\n\r]').str[-1].str.strip()
这两种方法都能得到你需要的拆分结果。
内容的提问来源于stack exchange,提问作者Abdul-Kareem Abdul-Rahman
相关产品推荐
相关产品推荐

