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
相关产品推荐
相关产品推荐

