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

如何在循环中向DataFrame添加多个长度不同的列

解决方案

循环逐列添加的实现方式

你可以在循环中对每个Series重置索引(丢弃原索引,生成从0开始的连续索引),再赋值给DataFrame的对应列。Pandas会自动扩展DataFrame的行数至最长列的长度,并为短列的缺失位置填充NaN。

import pandas as pd

# 初始化空DataFrame,指定列名
df = pd.DataFrame(columns=['g1', 'g2'])

# 示例Series(实际场景从其他DataFrame提取)
s1 = pd.Series(index=[1,2], data=[10,11], name='g1')
s2 = pd.Series(index=[3,4,5], data=[12,13,14], name='g2')

# 循环处理每个Series并添加为列
for series in [s1, s2]:
    # 重置Series索引为0开始的连续整数,丢弃原索引
    reset_series = series.reset_index(drop=True)
    # 赋值给DataFrame对应列名
    df[series.name] = reset_series

# 查看结果
print(df)

输出结果:

g1  g2
0  10.0  12
1  11.0  13
2   NaN  14

更高效的批量合并方式(可选)

如果列数较多,先收集所有Series并批量合并会更高效,原理同样是先重置每个Series的索引:

import pandas as pd

s1 = pd.Series(index=[1,2], data=[10,11], name='g1')
s2 = pd.Series(index=[3,4,5], data=[12,13,14], name='g2')

# 对每个Series重置索引后,按列合并
series_list = [s.reset_index(drop=True) for s in [s1, s2]]
df = pd.concat(series_list, axis=1)

print(df)

关键说明

  • 重置索引:reset_index(drop=True)会丢弃Series原有的非连续索引,生成从0开始的连续索引,保证列与列之间的位置对齐。
  • 自动填充NaN:当赋值或合并时,Pandas会自动将短列的缺失位置填充为NaN,同时将DataFrame的行数扩展至所有列中的最大长度。
  • 列名保留:Series的name属性会直接作为DataFrame的列名,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:42:36