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

Pandas拆分Address2列报错:Columns must be same length as key 求助

问题解决:从地址列提取指定词并处理单列拆分的NaN填充

问题分析

你遇到的报错Columns must be same length as key,本质是当Address2中只有单个词时,str.rsplit(' ', n=1, expand=True)只会生成1列数据,但你试图把它赋值给2列,导致列数不匹配。Pandas在这种场景下会自动用NaN填充缺失的列,只要我们正确处理拆分后的列赋值即可。

解决方案

1. 处理Address1:提取最后一个词

你的原有代码是可行的,它会把Address1按空格从右拆分1次,分成前面的内容和最后一个词,不足的部分自动补NaN(不过这里Address1都有多个词,所以不会出现):

import pandas as pd

data = {
    'Address1': ['3 Steel Street', '1 Arnprior Crescent', '40 Bargeddie Street Blackhill'],
    'Address2': ['Saltmarket', 'Castlemilk', 'Blackhill', 'Glasgow City Centre']  # 新增多词测试用例
}

df = pd.DataFrame(data)

# 处理Address1,提取最后一个词
df[['Address1_Prefix', 'Address1_LastWord']] = df['Address1'].str.rsplit(' ', n=1, expand=True)

2. 处理Address2:提取第一个词

要提取第一个词,同时让多余内容放在第二列,单个词的行第二列自动填充NaN,用str.split(' ', n=1, expand=True)即可,拆分后直接指定列名赋值:

# 处理Address2,提取第一个词
df[['Address2_FirstWord', 'Address2_Suffix']] = df['Address2'].str.split(' ', n=1, expand=True)

最终结果

运行后df的核心内容如下:

Address1Address2Address1_PrefixAddress1_LastWordAddress2_FirstWordAddress2_Suffix
3 Steel StreetSaltmarket3 SteelStreetSaltmarketNaN
1 Arnprior CrescentCastlemilk1 ArnpriorCrescentCastlemilkNaN
40 Bargeddie Street BlackhillBlackhill40 Bargeddie StreetBlackhillBlackhillNaN
NaNGlasgow City CentreNaNNaNGlasgowCity Centre

关键说明

  • str.split(' ', n=1, expand=True):n=1表示只拆分1次,expand=True会把拆分结果转为DataFrame,当某行只有一个词时,第二列自动填充NaN,彻底避免列数不匹配的报错。
  • 如果只需要提取指定的词(比如只需要Address2的第一个词,不需要后缀),可以直接取拆分后的第一列:
    df['Address2_FirstWord'] = df['Address2'].str.split(' ', n=1, expand=True)[0]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:53:17