You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Pandas筛选Twitter JSON数据集中country_code为gb的行?

解决Twitter JSON数据集批量筛选嵌套字段的问题

你遇到的核心问题是user_location是嵌套的字典结构,而不是简单的字符串,所以之前的两种方法都没法批量生效:

  • 第一种硬编码索引[4]的方式只能处理单条数据,没法遍历全量;
  • 第二种用isin(["gb"])是在检查整个user_location字段是否等于字符串"gb",但它实际是个字典,自然匹配不上。

下面给你两种靠谱的批量筛选方案,都能帮你提取出country_code为"gb"的tweet_id:

方案一:用apply遍历判断(适合中小数据集)

这种方法直接对每一行的user_location字段做检查,还能处理数据格式不规范的情况(比如有的行user_location是空值或者不是字典):

import pandas as pd

# 读取JSON Lines格式的数据
df = pd.read_json('example.json', lines=True)

# 生成筛选掩码:判断user_location是字典,且country_code等于"gb"
filter_mask = df['user_location'].apply(
    lambda x: isinstance(x, dict) and x.get('country_code') == 'gb'
)

# 筛选符合条件的行,提取tweet_id列
valid_tweet_ids = df.loc[filter_mask, 'tweet_id']

# 输出结果,也可以转成列表保存
print(valid_tweet_ids.tolist())

代码说明:

  • isinstance(x, dict):先确保当前行的user_location是字典类型,避免遇到空值或非字典数据时报错;
  • x.get('country_code'):用get方法比直接x['country_code']更安全,就算某个字典里没有country_code键,也只会返回None而不会崩溃;
  • filter_mask是一个布尔数组,标记每一行是否符合筛选条件,最后用loc提取对应行的tweet_id。

方案二:用json_normalize展开嵌套结构(适合大数据集)

如果你的数据集很大,apply的效率可能不够高,这时可以用pd.json_normalize把嵌套的JSON结构展开成扁平的DataFrame,之后操作就和普通表格一样简单了:

import pandas as pd

# 读取数据
df = pd.read_json('example.json', lines=True)

# 把整个数据集的嵌套结构展开,用下划线连接层级字段名
normalized_df = pd.json_normalize(df.to_dict('records'), sep='_')

# 直接筛选user_location_country_code等于"gb"的行,提取tweet_id
valid_tweet_ids = normalized_df[normalized_df['user_location_country_code'] == 'gb']['tweet_id']

print(valid_tweet_ids.tolist())

代码说明:

  • pd.json_normalize(df.to_dict('records')):把DataFrame转成字典列表后,展开所有嵌套的字段,比如原来的user_location.country_code会变成新列user_location_country_code;
  • 展开后就可以像筛选普通列一样操作,效率比apply高很多,尤其是数据量百万级以上时更明显。

额外注意事项

  • 如果你的数据里有部分行的user_location是None或者空字典,两种方案都能自动跳过这些行,不会报错;
  • 如果需要把结果保存到文件,可以用valid_tweet_ids.to_csv('gb_tweet_ids.csv', index=False)导出成CSV文件。

内容的提问来源于stack exchange,提问作者zaraa s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:58:03