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

如何用Pandas对齐DataFrame两列列表长度并填充None值?

解决Pandas DataFrame两列列表按行填充至等长的问题

Pandas没有直接内置的函数能完成这个需求,但可以通过自定义逻辑结合apply方法快速实现,以下是具体方案:

1. 自定义填充函数

先编写一个处理单行数据的函数,对比当前行两列列表的长度,将较短的列表用None填充至与较长列表相同的长度:

def pad_row_lists(row):
    addr_len = len(row["address"])
    id_len = len(row["house_id"])
    target_len = max(addr_len, id_len)
    # 填充address列
    row["address"] = row["address"] + [None] * (target_len - addr_len)
    # 填充house_id列
    row["house_id"] = row["house_id"] + [None] * (target_len - id_len)
    return row

2. 应用函数到整个DataFrame

使用apply方法将上述函数作用于每一行(axis=1表示按行处理):

import pandas as pd

# 输入DataFrame
df = pd.DataFrame(
    {
        "address": [['123 Road', '456 Road'], ['789 Road'], ['962 Road', '875 Road', '777 Road']],
        "house_id": [['123', '456'], ['789', '987'], ['962']]
    }
)

# 执行填充
result_df = df.apply(pad_row_lists, axis=1)

3. 验证结果

处理后的result_df与你期望的输出完全一致:

print(result_df)
# 输出:
#                     address                house_id
# 0        [123 Road, 456 Road]           [123, 456]
# 1           [789 Road, None]           [789, 987]
# 2  [962 Road, 875 Road, 777 Road]  [962, None, None]

大数据量优化方案

如果你的DataFrame行数较多,apply的效率可能不足,可以提前计算所有行的目标长度,再批量填充:

# 先计算每行的最大长度
max_lengths = df.apply(lambda x: max(len(x["address"]), len(x["house_id"])), axis=1)

# 批量填充address列
df["address"] = df.apply(
    lambda x: x["address"] + [None] * (max_lengths[x.name] - len(x["address"])),
    axis=1
)

# 批量填充house_id列
df["house_id"] = df.apply(
    lambda x: x["house_id"] + [None] * (max_lengths[x.name] - len(x["house_id"])),
    axis=1
)

这种方式避免了在单行处理中重复计算最大长度,能小幅提升处理效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:20:27