如何从列表提取关键词,并为每个关键词创建独立数据列?
提取列表元素并创建独立美食列(Python Pandas实现)
假设你用Pandas处理数据,以下是具体操作步骤:
1. 准备示例数据
先构造模拟数据(替换成你的真实DataFrame即可):
import pandas as pd df = pd.DataFrame({ 'id': [1, 2], 'cuisine': [['Hot Pot', 'Korean BBQ', 'BBQ', 'Korean'], ['Desserts', 'Modern Australian']] })
2. 获取所有唯一美食类型
先把列表展开,再提取不重复的美食名称:
unique_cuisines = df['cuisine'].explode().unique()
3. 为每个美食创建独立列
有两种常用方法:
方法一:循环判断(直观易懂)
遍历每个唯一美食,给每行标记是否包含该美食(1=包含,0=不包含):
for cuisine in unique_cuisines: df[cuisine] = df['cuisine'].apply(lambda x: 1 if cuisine in x else 0)
方法二:向量化操作(高效处理大数据)
通过展开列表、生成哑变量,再按原行索引聚合求和,效率更高:
# 展开列表并生成哑变量,再按原行号分组求和 cuisine_dummies = df['cuisine'].explode().str.get_dummies().groupby(level=0).sum() # 将哑变量列合并到原DataFrame df = df.join(cuisine_dummies)
补充处理:避免重复值导致的计数异常
如果某行的cuisine列表存在重复元素,求和后可能出现大于1的值,可通过clip(0,1)确保列值只有0或1:
cuisine_dummies = df['cuisine'].explode().str.get_dummies().groupby(level=0).sum().clip(0,1)
最终效果
处理后的DataFrame会新增Hot Pot、Korean BBQ、BBQ、Korean、Desserts、Modern Australian等列,每行对应位置为1表示该行包含该美食,0则不包含。
内容的提问来源于stack exchange,提问作者Mahbub Abdullah
相关产品推荐
相关产品推荐

