如何用Pandas str.extract提取字典格式字符串中的THIS_id值
解决Pandas提取类似字典字符串中THIS_id字段的问题
方案一:优化正则精准提取
你之前的正则会带出引号,是因为匹配范围没限制好。可以用下面的正则,直接提取'THIS_id': '后面、下一个单引号之前的内容:
import pandas as pd lista=[ "{'FIRST_id': 'awe', 'THIS_id': 'awec_20230222_1626_i0ov0w', 'NOTTHIS_id': 'awep_20230222_1628_p8f5hd52u3oknc24'}","{'FIRST_id': 'awe', 'THIS_id': 'awec_20230222_1626_i0ov0w', 'NOTTHIS_id': 'awep_20230222_1641_jwjajtals49wc88p'}"] dfpack=pd.DataFrame(lista,columns=["awesome_config"]) # 提取不带引号的THIS_id dfpack['THIS_id'] = dfpack['awesome_config'].str.extract(r"'THIS_id': '([^']+)'", expand=False) print(dfpack['THIS_id'])
这里[^']+的意思是匹配所有不是单引号的字符,刚好精准拿到引号里的内容,不会带引号。
方案二:转成字典再提取(更稳妥)
如果你的字符串格式一直是类似字典的结构,推荐用这种方法——把字符串转成真实的Python字典,再直接取值,哪怕字段顺序变了或者格式有小调整,都能正常工作:
import pandas as pd import ast lista=[ "{'FIRST_id': 'awe', 'THIS_id': 'awec_20230222_1626_i0ov0w', 'NOTTHIS_id': 'awep_20230222_1628_p8f5hd52u3oknc24'}","{'FIRST_id': 'awe', 'THIS_id': 'awec_20230222_1626_i0ov0w', 'NOTTHIS_id': 'awep_20230222_1641_jwjajtals49wc88p'}"] dfpack=pd.DataFrame(lista,columns=["awesome_config"]) # 解析字符串为字典,提取THIS_id dfpack['THIS_id'] = dfpack['awesome_config'].apply(lambda x: ast.literal_eval(x)['THIS_id']) print(dfpack['THIS_id'])
ast.literal_eval是安全解析这类字符串的工具,不会像eval有风险,解析完直接用键名'THIS_id'就能拿到纯净值。
最终输出结果:
0 awec_20230222_1626_i0ov0w 1 awec_20230222_1626_i0ov0w Name: THIS_id, dtype: object
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

