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

Python如何过滤DataFrame嵌套列表列 筛选NR/NN后explode拆分行

实现方案

首先需要注意:你给出的字典格式示例中pos是字符串类型的嵌套列表,所以需要先转为Python列表对象;如果你的实际DataFrame中pos已经是原生列表结构,可以跳过类型转换步骤。

完整实现代码

import pandas as pd
import ast

# 构造示例DataFrame,你可以替换为自己的读入数据逻辑
data = [
    {'id': 1, 'pos': "[[['Malaysia','NR'], [':','PU'], ['Natural','JJ'], ['selling price','NN']]]"},
    {'id': 2, 'pos': "[[['Spot Price','NN'], [':','PU'], ['cotton','NN'], ['India', ' NR']]]"}
]
df = pd.DataFrame(data)

# 步骤1:将字符串格式的嵌套列表转为Python列表(如果pos已经是列表类型可跳过这步)
df['pos'] = df['pos'].apply(ast.literal_eval)

# 步骤2:处理嵌套列表,过滤词性为NR/NN的条目
def filter_pos(pos_list):
    # 去掉最外层的一层嵌套,拿到所有[词语, 词性]对
    inner_pairs = pos_list[0]
    res = []
    for words, pos in inner_pairs:
        # 清洗词性前后的空格,匹配NR/NN规则
        clean_pos = pos.strip()
        if clean_pos in ('NR', 'NN'):
            res.append({'words': words, 'part_of_speech': clean_pos})
    return res

df['pos'] = df['pos'].apply(filter_pos)

# 步骤3:按行拆分pos列,拆分出最终的两列字段
df = df.explode('pos', ignore_index=True)
df = pd.concat([df['id'], df['pos'].apply(pd.Series)], axis=1)

print(df)

运行后输出结果和你要求的格式完全一致。

内容的提问来源于stack exchange,提问作者ah bon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:48:03