如何在Pandas中从多列嵌套结构提取整数值
高效提取DataFrame嵌套列中的整数值
嘿,我懂你遇到的麻烦了——用字符串替换没效果还报错,根本原因是你的ranks和search_volume列存的不是字符串,而是列表嵌套字典和字典对象,字符串处理方法自然不适用,这也是你碰到AttributeError: 'list' object has no attribute 'lstrip'的原因。
咱们直接操作这些Python对象,用高效的方式提取数值:
方法1:使用apply结合lambda(简洁直观)
# 处理ranks列:提取列表中第一个字典的rank值 df['ranks'] = df['ranks'].apply(lambda x: x[0]['rank']) # 处理search_volume列:提取字典中的search_volume值 df['search_volume'] = df['search_volume'].apply(lambda x: x['search_volume'])
方法2:使用列表推导式(性能更优,适合大数据集)
如果你的DataFrame行数很多,列表推导式的执行效率会比apply更高:
# 处理ranks列 df['ranks'] = [entry[0]['rank'] for entry in df['ranks']] # 处理search_volume列 df['search_volume'] = [entry['search_volume'] for entry in df['search_volume']]
执行完上面的代码后,你的DataFrame就会变成你想要的样子:
| keyword | ranks | search_type | search_volume |
|---|---|---|---|
| keyword1 | 1 | 1 | 10 |
| keyword1 | 1 | 2 | 10 |
| keyword2 | 1 | 1 | 390 |
| keyword2 | 1 | 2 | 390 |
| keyword3 | 1 | 1 | 170 |
这两种方法都直接操作原始的Python对象,避免了字符串转换的额外开销,比你之前尝试的字符串替换高效得多。
内容的提问来源于stack exchange,提问作者jceg316
相关产品推荐
相关产品推荐

