如何在循环中向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
相关产品推荐
相关产品推荐

