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

为何用字典创建Pandas DataFrame时数据值丢失?

问题分析与解决

你的代码问题出在字典值的类型被错误替换:原本初始化的字典每个键对应空列表(用于存储列数据),但你用update把这些列表直接替换成了单个字符串。而pandas.DataFrame.from_dict要求每个列对应的是可迭代的序列(比如列表、数组),混合单个字符串和空列表时,pandas无法正确识别行数据,导致生成空DataFrame。

修复方案一:往列表中追加元素(适合批量收集多条数据)

保持字典值为列表类型,通过append添加单条数据,这样每个列的列表长度一致,pandas能正确生成行:

import pandas as pd

SimpleDict = {
        "Username":[],
        'Role':[],
        'User Status':[],
        'laptop Status':[],
        'Laptop Serial':[],
        'Error':[]
    }
# 替换update为append,往对应列的列表里加数据
SimpleDict['Username'].append('Goose')
SimpleDict['User Status'].append('Active')
SimpleDict['Role'].append('CEO')

print(SimpleDict)
# 输出:{'Username': ['Goose'], 'Role': ['CEO'], 'User Status': ['Active'], 'laptop Status': [], 'Laptop Serial': [], 'Error': []}

df = pd.DataFrame.from_dict(SimpleDict)
print(df)
# 输出会是一行数据,未赋值的列显示NaN

修复方案二:构建单条数据字典后转DataFrame(适合单条数据场景)

如果只需要生成单条数据的DataFrame,可以直接构建包含所有字段的单条数据字典,再指定索引生成:

import pandas as pd

# 构建单条用户数据
user_data = {
    "Username": "Goose",
    "Role": "CEO",
    "User Status": "Active",
    "laptop Status": None,
    "Laptop Serial": None,
    "Error": None
}

# 用index=[0]指定生成一行DataFrame
df = pd.DataFrame(user_data, index=[0])
print(df)

为什么原代码失效?

原代码中SimpleDict.update({'Username': 'Goose'})会把"Username"对应的空列表直接替换成字符串'Goose'。此时字典里的值既有长度为0的空列表,又有长度为5的字符串('Goose'的字符数),pandas无法匹配这些长度不一致的数据源,最终只能生成空DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:50:27