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

如何从列表生成单键多值Python字典并转为多行Pandas DataFrame

问题解决:从列表生成多值字典并转为多行DataFrame

你的代码之所以生成单行结果,是因为构造results字典时,把missing_list和bad_status_list又嵌套了一层列表(比如[missing_list]),导致Pandas将整个列表视为单个单元格的值,最终输出单行数据。

修正方案1:生成两列多行的DataFrame

如果希望每种状态对应一列,每行显示一个资产标签,直接去掉字典值的嵌套列表即可:

import pandas as pd

# 读取数据
in_stock = pd.read_csv("instock.csv")
new_data = pd.read_csv("new_data.csv")

# 提取资产标签列表
in_stock_list = in_stock.asset_tag.to_list()
new_data_list = new_data.asset_tag.to_list()

# 筛选缺失和状态异常的资产
missing_list = [item for item in in_stock_list if item not in new_data_list]
bad_status_list = [item for item in new_data_list if item not in in_stock_list]

# 构造无嵌套的字典
results = {
    "Missing Assets": missing_list,
    "Wrong Status": bad_status_list
}

# 转换为DataFrame,自动对齐行数,缺失值填充NaN
df = pd.DataFrame(results)

修正方案2:生成单列多行(含状态标注)

如果需要将所有资产标签放在同一列,同时标注状态类型,可构造包含状态和标签的元组列表,再转换为DataFrame:

import pandas as pd

# 读取数据与筛选逻辑同上
in_stock = pd.read_csv("instock.csv")
new_data = pd.read_csv("new_data.csv")
in_stock_list = in_stock.asset_tag.to_list()
new_data_list = new_data.asset_tag.to_list()

missing_list = [item for item in in_stock_list if item not in new_data_list]
bad_status_list = [item for item in new_data_list if item not in in_stock_list]

# 构造包含状态类型的数据集
missing_records = [("Missing Assets", tag) for tag in missing_list]
bad_status_records = [("Wrong Status", tag) for tag in bad_status_list]
all_records = missing_records + bad_status_records

# 转换为单列(资产标签)加状态列的DataFrame
df = pd.DataFrame(all_records, columns=["Status Type", "Asset Tag"])

# 若仅需单列资产标签,直接合并列表即可:
# df = pd.DataFrame({"Asset Tag": missing_list + bad_status_list})

关键说明

  • 原代码中[missing_list]会创建一个仅包含单个元素的列表(这个元素就是完整的missing_list),Pandas会将其识别为一行数据;
  • 去掉嵌套后,字典的值直接是资产标签列表,Pandas会自动将列表中的每个元素拆分为单独的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:16:28