如何从DataFrame类字典格式的browser列逐行提取浏览器名称
解决方案
你存储在browser列的内容是字符串格式的Python列表嵌套字典结构,不需要写复杂的split逻辑,以下两种方案都可以快速完成提取:
方案1:类型转换后直接取值(推荐)
用标准库ast的literal_eval方法把字符串转成原生Python对象再取值,鲁棒性最强,不会因为字段顺序、多余空格等格式小变动失效,后续要提取版本号也只需要修改key即可。
import ast df_agent_info['browser_name'] = df_agent_info['browser'].apply( lambda x: ast.literal_eval(x)[0]['name'] )
方案2:正则快速匹配
如果确定数据格式完全固定,也可以直接用正则提取name字段对应的值,代码更简短:
df_agent_info['browser_name'] = df_agent_info['browser'].str.extract(r"'name': '([^']+)'")
效果说明
针对你给出的样例数据,两种方法执行后,新生成的browser_name列所有行的取值均为Chrome,符合提取预期。
你之前写的split逻辑容错性极差,只要字段位置、空格数量有微小变化就会返回空值或错误结果,不建议使用。
内容的提问来源于stack exchange,提问作者d3hero23
相关产品推荐
相关产品推荐

