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

如何合并Pandas DataFrame中长度不同的三个Series?

解决Pandas合并不同长度Series的问题

一、先解决pd.concat的报错问题

你遇到的TypeError是因为pd.concat的第一个参数必须是可迭代的Pandas对象集合(比如列表、元组),直接传入两个Series不符合参数要求。

正确的concat写法

假设你已提取出三个需要的Series:

# 从主表提取numSv
msg_numSv = 主表['numSv']
# 从子表提取_iTOW和svDataSvId
sv_iTOW = 子表['_iTOW']
sv_svId = 子表['svDataSvId']

# 将Series放入列表后传入concat
x = pd.concat([msg_numSv, sv_iTOW, sv_svId], axis=1)
  • axis=1表示按列拼接,默认是按行拼接(axis=0)
  • 这种方式会按索引对齐,长度不一致的位置会填充NaN,但可能不符合你的业务关联需求

二、基于业务关联的合理合并方案

从数据结构来看,子表的_parentMessageIndex对应主表的_messageIndex,且两张表都有_iTOW字段,这才是正确的关联依据,应该用merge匹配数据而非简单拼接:

步骤1:提取主表关联字段与目标字段

# 从主表取出关联用字段和需要的numSv
main_selected = 主表[['_messageIndex', '_iTOW', 'numSv']]

步骤2:关联子表与主表

# 按_parentMessageIndex和_iTOW双字段匹配,保留子表所有行(左连接)
merged_df = pd.merge(
    子表,
    main_selected,
    left_on=['_parentMessageIndex', '_iTOW'],
    right_on=['_messageIndex', '_iTOW'],
    how='left'
)

步骤3:提取最终需要的三个字段

# 获取目标字段集合
result = merged_df[['numSv', '_iTOW', 'svDataSvId']]

这种方式能保证子表每一行都匹配到对应主表的numSv值,符合业务逻辑。

三、若需忽略索引直接按行号拼接

如果不需要业务关联,仅想按行号顺序对齐三个Series(忽略原索引),可重置索引后再拼接:

x = pd.concat(
    [msg_numSv.reset_index(drop=True), sv_iTOW.reset_index(drop=True), sv_svId.reset_index(drop=True)],
    axis=1
)
  • reset_index(drop=True)会丢弃原索引,用连续自增索引对齐行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:06:02