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

从含列表的字典创建单行DataFrame的相关技术疑问

Pandas DataFrame构造相关问题

先看原始代码及输出:

import pandas as pd
my_list = [1,2,3]
year = 2023
item = 'obj'
res_dict = {"year" : year, "values" : my_list, "name" : item }
print(res_dict)
# 输出: {'year': 2023, 'values': [1, 2, 3], 'name': 'obj'}
df = pd.DataFrame(res_dict)
print(df)
# 输出:
#    year  values name
# 0  2023       1  obj
# 1  2023       2  obj
# 2  2023       3  obj

我需要生成两种不同的DataFrame,先说明第一种需求:希望在values列的单元格中直接存储列表,得到如下结果:

year     values  name
0  2023  [1, 2, 3]   obj

疑问一:在DataFrame单元格中存储列表是否合理?

这种方式并非完全不能实现,但通常不推荐,原因如下:

  • 违背了DataFrame的结构化设计初衷:DataFrame的核心是处理标量类型的结构化数据,每一列应存储同类型的单个值,这样才能充分利用Pandas的向量化运算、索引、聚合等高效功能。
  • 后续处理成本极高:筛选、统计、可视化等操作都需要额外遍历单元格内的列表,无法直接调用Pandas内置方法,效率极低。
  • 数据持久化容易出问题:保存为CSV、Excel等格式时,列表会被转为字符串存储,读取后需要额外解析,很容易出现格式错误。
  • 如果确实需要存储嵌套数据,更建议用JSON这类专门的嵌套格式,或者直接把数据拆分为结构化形式。

疑问二:如何将列表元素拆分为单独列,得到如下DataFrame?

目标结果:

year  values1  values2  values3  name
0  2023        1        2        3   obj

可以通过以下几种方式实现:

方法1:拆分列表为单独列后合并

import pandas as pd
my_list = [1,2,3]
year = 2023
item = 'obj'

# 将列表转为带命名列的DataFrame
values_df = pd.DataFrame([my_list], columns=[f'values{i+1}' for i in range(len(my_list))])
# 构造其他字段的DataFrame
other_df = pd.DataFrame({'year': [year], 'name': [item]})
# 横向合并两个DataFrame
final_df = pd.concat([other_df, values_df], axis=1)
print(final_df)

方法2:直接构造拆分后列的字典

import pandas as pd
my_list = [1,2,3]
year = 2023
item = 'obj'

# 构造包含所有拆分列的字典
res_dict = {
    'year': [year],
    **{f'values{i+1}': [val] for i, val in enumerate(my_list)},
    'name': [item]
}
final_df = pd.DataFrame(res_dict)
print(final_df)

方法3:先存列表再拆分列

import pandas as pd
my_list = [1,2,3]
year = 2023
item = 'obj'

# 先构造存储列表的单行DataFrame
temp_df = pd.DataFrame({'year': [year], 'values': [my_list], 'name': [item]})
# 拆分values列并重命名
values_split = temp_df['values'].apply(pd.Series).rename(columns=lambda x: f'values{x+1}')
# 合并并删除原values列
final_df = pd.concat([temp_df.drop('values', axis=1), values_split], axis=1)
print(final_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:55:13