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

Pandas技术实现:从列中字典列表生成0-1特征列

解决Pandas字典列表转0-1特征列的问题

我来帮你搞定这个设施特征转换的需求!你的思路是对的,只是现有代码里有个小细节没处理好——Amenities列的每个单元格是字典组成的列表,不是单个字典,所以不能直接用.items()遍历,得先拆解列表里的每个字典才行。下面我给你完善代码,同时兼顾效率和你的需求逻辑:

基础版(贴合你的迭代判断逻辑)

这个版本严格按照你要求的「迭代时判断列是否存在,不存在则新建」的逻辑来写:

import pandas as pd

# 假设你的DataFrame已经是df,先确保Amenities是列表格式(如果是字符串,需要先解析,后面会说)
for i, row in df.iterrows():
    amenities_list = row['Amenities']
    # 遍历列表里的每个设施字典
    for amenity_dict in amenities_list:
        # 取出设施名称,去掉首尾空格避免重复列(比如"Complex Wifi "和"Complex Wifi")
        amenity_name = amenity_dict['Description'].strip()
        # 判断列是否存在
        if amenity_name in df.columns:
            # 列存在,当前行设为1
            df.loc[i, amenity_name] = 1
        else:
            # 列不存在,新建列并初始化为0,再把当前行设为1
            df[amenity_name] = 0
            df.loc[i, amenity_name] = 1

# 可选:把新增的设施列转为整数类型,确保是0/1而不是浮点数
# 先筛选出所有新增的设施列(假设原DataFrame除了Amenities都是其他列)
original_columns = df.columns.drop('Amenities')
amenity_columns = [col for col in df.columns if col not in original_columns]
df[amenity_columns] = df[amenity_columns].astype(int)

优化版(适合大数据量,效率更高)

如果你的DataFrame行数很多,iterrows()会比较慢。推荐先一次性收集所有可能的设施,再批量创建列并赋值,效率提升明显:

import pandas as pd

# 第一步:收集所有不重复的设施名称
all_amenities = set()
for amenities_list in df['Amenities']:
    for amenity_dict in amenities_list:
        amenity_name = amenity_dict['Description'].strip()
        all_amenities.add(amenity_name)

# 第二步:一次性创建所有设施列,初始值设为0
for amenity in all_amenities:
    df[amenity] = 0

# 第三步:遍历每行,给对应的设施设为1
for idx, amenities_list in enumerate(df['Amenities']):
    for amenity_dict in amenities_list:
        amenity_name = amenity_dict['Description'].strip()
        df.loc[idx, amenity_name] = 1

# 转为整数类型
df[list(all_amenities)] = df[list(all_amenities)].astype(int)

额外注意事项

如果你的Amenities列存储的是字符串格式的列表(比如从CSV/JSON读取时没自动解析),需要先把字符串转成真实的列表:

import ast
# 把字符串格式的列表解析成Python列表
df['Amenities'] = df['Amenities'].apply(ast.literal_eval)

效果示例

处理后你的DataFrame会新增每个设施对应的列,比如Basketball Court(s)、Bike Rack / Bike Storage等,有该设施的行对应值为1,没有的为0,完美符合你要的0-1型特征。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:38:10