如何将list of lists转换为指定结构的DataFrame?
将嵌套列表格式的Series转换为指定结构的DataFrame
完全可行,以下是具体实现步骤和代码:
前提说明
假设你已准备好与展开后数据行数匹配的date对象序列(若未准备,可按样本数量生成连续日期)。原Series中每个元素是包含约80个数值的子列表组成的二维列表(即每个ID对应多行样本,每行样本含80个特征)。
实现步骤与代码
- 模拟原数据(可替换为你的实际数据)
import pandas as pd import numpy as np # 构造499个元素的Series,每个元素含3个样本,每个样本80个特征(示例用3个特征简化) data = [np.random.randn(3, 80).tolist() for _ in range(499)] s = pd.Series(data, dtype='object')
- 准备日期序列
# 假设每个ID对应3个样本,生成总长度为499*3的连续日期 start_date = "2020-01-01" dates = pd.date_range(start_date, periods=len(s)*3)
- 转换为目标DataFrame
# 展开嵌套列表,将每个子列表转为列 df = s.explode().apply(pd.Series) # 重命名特征列为col1至col80 df.columns = [f"col{idx+1}" for idx in df.columns] # 添加ID列(对应原Series的索引) df["ID"] = df.index # 设置日期为行索引 df.index = dates # 调整列顺序,将ID列前置 df = df[["ID"] + [col for col in df.columns if col != "ID"]]
关键操作说明
s.explode():将原Series每个元素中的列表展开为多行,原索引会重复对应每个子样本。.apply(pd.Series):将每个子样本的列表拆分为单独的特征列。- 日期序列长度必须与展开后DataFrame的行数一致,若各ID对应的样本数不同,需先统计总样本数再生成对应长度的日期序列。
内容的提问来源于stack exchange,提问作者Beginner_01
相关产品推荐
相关产品推荐

