迭代时如何从多个pandas Series对象创建目标格式DataFrame
实现结论
完全可以先将迭代得到的Series存入列表再统一转换为DataFrame,这也是该场景下效率最高的实现方式之一。
具体实现步骤
步骤1:迭代过程收集Series到列表
迭代过程中每生成一个Series就存入空列表,可通过给Series设置name属性自定义对应DataFrame的列名,不设置的话默认列名会以0、1、2的序号对应迭代轮次。
import pandas as pd # 初始化存储Series的空列表 series_list = [] # 模拟你的迭代过程,这里用你给出的两个示例Series演示 # 第一轮迭代生成的Series s1 = pd.Series( [118.55, 62.73, 263.36, 315.07], index=['DE_AT', 'DE_CZ', 'PL_DE', 'PL_SK'] ) s1.name = 1 # 对应列名设置为迭代轮次1 series_list.append(s1) # 第二轮迭代生成的Series s2 = pd.Series( [118.55, 62.73, 263.36, 315.07, 420], index=['DE_AT', 'DE_CZ', 'PL_DE', 'PL_NL', 'PL_UK'] ) s2.name = 2 # 对应列名设置为迭代轮次2 series_list.append(s2)
步骤2:拼接列表得到目标DataFrame
直接用pd.concat按列拼接列表即可,pandas会自动按索引对齐,缺失值默认填充为NaN,完全符合你的需求:
# axis=1表示按列拼接 result_df = pd.concat(series_list, axis=1) # 可选:设置行索引名称为index,和你的预期格式完全对齐 result_df.index.name = 'index'
输出结果验证
最终生成的result_df内容如下,和你给出的预期效果完全一致:
1 2 index DE_AT 118.55 118.55 DE_CZ 62.73 62.73 PL_DE 263.36 263.36 PL_SK 315.07 NaN PL_NL NaN 315.07 PL_UK NaN 420.00
补充提示
如果迭代轮次较多,不需要手动设置name,直接在迭代时用计数器赋值即可:
series_list = [] for round_num in range(总迭代次数): # 你的业务逻辑生成当前轮Series s s.name = round_num + 1 # 列名从1开始计数 series_list.append(s) result_df = pd.concat(series_list, axis=1)
内容的提问来源于stack exchange,提问作者ryszard eggink
相关产品推荐
相关产品推荐

