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
相关产品推荐
相关产品推荐

