如何在DataFrame字典列中批量提取location字段值?
批量提取DataFrame字典列中location值的可行方法
问题原因
你之前的批量代码用了explode(),但user列存的是单个字典不是列表,explode()会把字典拆成键值对的行,后续操作自然失效。
方法1:直接用apply提取
这是最直接的方式,对每行的user字典直接取location:
df['location'] = df['user'].apply(lambda x: x.get('location') if isinstance(x, dict) else None)
- 用
x.get('location')代替x['location'],避免字典里没location键时报错 - 加
isinstance(x, dict)判断,防止遇到非字典格式的数据出异常
方法2:用str.get简化写法
Pandas的字符串方法支持直接提取字典的键,代码更简洁:
df['location'] = df['user'].str.get('location')
- 自动处理非字典的情况,返回
NaN - 写法更短,性能和apply差不多
方法3:转成DataFrame提取(适合多字段需求)
如果之后还要提取字典里的其他字段(比如username、followersCount),可以直接把整个user列转成DataFrame再合并:
user_df = df['user'].apply(pd.Series) df = df.join(user_df[['location']]) # 只合并location列
- 一次性提取所有字典字段,后续加其他字段很方便
- 可读性强,适合复杂场景
测试示例
给你个测试代码验证效果:
import pandas as pd # 构造测试数据 data = [ {'user': {'username': 'vinceXy798', 'location': 'Czech Republic', 'followersCount': 3151}}, {'user': {'username': 'test_user', 'location': 'London', 'followersCount': 120}}, {'user': {'username': 'no_loc_user', 'followersCount': 50}} # 没有location键的情况 ] df = pd.DataFrame(data) # 用方法1提取 df['location'] = df['user'].apply(lambda x: x.get('location') if isinstance(x, dict) else None) print(df[['user', 'location']])
输出结果:
user location 0 {'username': 'vinceXy798', 'location': 'Czech ... Czech Republic 1 {'username': 'test_user', 'location': 'London'... London 2 {'username': 'no_loc_user', 'followersCount': 50} NaN
内容的提问来源于stack exchange,提问作者sravanthi lakshmi
相关产品推荐
相关产品推荐

