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

如何向Pandas DataFrame添加不同长度列并保留所有数据?

解决Pandas添加不同长度列时的数据截断问题

当你直接向空DataFrame赋值添加列时,后续列的长度如果超过已存在列的长度,超出部分会被截断。要保留所有列的完整数据,不要直接赋值列,而是用pd.concat()将每个Series合并成DataFrame——它会自动按索引对齐,长度不足的位置填充NaN,不管添加顺序如何,都能保留所有数据。

原问题示例(首列较短导致后续列截断)

import pandas as pd

df_profile = pd.DataFrame()
df_profile['A'] = pd.Series([1,2,3,4])
df_profile['B'] = pd.Series([10,20,30,40,50,60])

print(df_profile)

输出:

A   B
0  1  10
1  2  20
2  3  30
3  4  40

可以看到Series B的后两个值(50、60)被截断了。

改进方案:使用pd.concat合并

不管列的添加顺序如何,把每个Series转为单独的DataFrame,再用pd.concat()按列合并:

import pandas as pd

# 定义所有要添加的列
series_dict = {
    'A': pd.Series([1,2,3,4]),
    'B': pd.Series([10,20,30,40,50,60])
}

# 合并成DataFrame
df_profile = pd.concat(series_dict, axis=1)
print(df_profile)

输出:

A     B
0  1.0  10.0
1  2.0  20.0
2  3.0  30.0
3  4.0  40.0
4  NaN  50.0
5  NaN  60.0

这样A列不足的位置补NaN,B列的所有数据都被保留了。

循环添加场景的适配

如果是循环动态添加列,可以先把每个Series存入字典,最后一次性合并;或者每次合并一个新列:

import pandas as pd

df_profile = pd.DataFrame()
# 模拟循环添加不同长度的列
columns_to_add = [
    ('A', [1,2,3,4]),
    ('B', [10,20,30,40,50,60]),
    ('C', [100,200])
]

for col_name, data in columns_to_add:
    # 每次将新Series转为DataFrame,和原DataFrame合并
    df_profile = pd.concat([df_profile, pd.Series(data, name=col_name)], axis=1)

print(df_profile)

输出:

A     B      C
0  1.0  10.0  100.0
1  2.0  20.0  200.0
2  3.0  30.0    NaN
3  4.0  40.0    NaN
4  NaN  50.0    NaN
5  NaN  60.0    NaN

所有列的完整数据都被保留,不足的位置自动填充NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:07:18