为何用字典创建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
相关产品推荐
相关产品推荐

