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

Python:提取二维列表中named tuple的v值并构建Pandas DataFrame

提取Named Tuple中的v值构建DataFrame

嘿,这个问题很好解决,你只需要把每个Cell对象里的v属性提取出来就行,这里有两种实用的方法:

方法一:预处理数据再创建DataFrame

在传入pandas.DataFrame()之前,先把二维列表里的每个Cell转换成它的v值,用列表推导式就能快速搞定:

import pandas as pd
import collections

Cell = collections.namedtuple('Cell',['r','c','v'])
cells = [[Cell(1,3,5),Cell(6,233,22)],[Cell(6,88,22),Cell(6454,2344443,34)]]

# 预处理:提取每个Cell的v值
processed_cells = [[cell.v for cell in row] for row in cells]
df = pd.DataFrame(data=processed_cells)

print(df)

运行后输出的DataFrame就是你要的:

0   1
0   5  22
1  22  34

这种方法的优势是效率更高,尤其是当你的数据量很大的时候,因为提前把数据转换成数值类型,避免了后续DataFrame的逐元素操作。

方法二:创建DataFrame后再转换

如果你已经有了包含Cell对象的DataFrame,或者不想提前处理数据,可以用applymap()方法遍历每个单元格,提取v值:

import pandas as pd
import collections

Cell = collections.namedtuple('Cell',['r','c','v'])
cells = [[Cell(1,3,5),Cell(6,233,22)],[Cell(6,88,22),Cell(6454,2344443,34)]]

df = pd.DataFrame(data=cells)
# 转换每个单元格的Cell对象为v值
df = df.applymap(lambda cell: cell.v)

print(df)

这个方法更灵活,适合已经构建好DataFrame之后需要调整的场景,唯一要注意的是如果数据量极大,applymap()的速度会比预处理慢一些。

两种方法都能得到你想要的结果,选哪种就看你的实际需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:10:34