Python中如何将DataFrame列内方括号文本提取为独立列?
解决方案
直接用Pandas的字符串处理结合正则表达式就能实现,而且可以适配任意成对的括号(圆括号()、方括号[]、花括号{}):
完整代码示例
import pandas as pd # 原始数据 column_1 = ["Northern Rockies, British Columbia [9A87]", "Northwest Territories [2H89]", "Canada [00052A]", "Division No. 1, Newfoundland and Labrador [52A]"] column_2 = ["aa", "bb", "cc", "dd"] column_3 = [4, 4.5, 23, 1] # 创建DataFrame df = pd.DataFrame(list(zip(column_1, column_2, column_3)), columns=['column_1', 'column_2', 'column_3']) # 正则表达式:匹配任意成对括号及内部内容,分组提取括号内的文本 # 解释: # [\(\[\{] 匹配左括号(圆/方/花) # (.+?) 非贪婪匹配括号内的所有内容 # [\)\]\}] 匹配对应的右括号 df['column_4'] = df['column_1'].str.extract(r'([\(\[\{])(.+?)([\)\]\}])', expand=False)[1] # 清理column_1:去掉括号及内部的内容,同时去除末尾可能存在的空格 df['column_1'] = df['column_1'].str.replace(r'\s*[\(\[\{].*?[\)\]\}]', '', regex=True) # 查看结果 print(df)
输出结果
column_1 column_2 column_3 column_4 0 Northern Rockies, British Columbia aa 4.0 9A87 1 Northwest Territories bb 4.5 2H89 2 Canada cc 23.0 00052A 3 Division No. 1, Newfoundland and Labrador dd 1.0 52A
适配说明
如果你的数据里混合了多种括号(比如有的用圆括号,有的用方括号),这个正则表达式也能正常提取,不需要修改代码。
内容的提问来源于stack exchange,提问作者Salahuddin
相关产品推荐
相关产品推荐

