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的核心内容如下:
| Address1 | Address2 | Address1_Prefix | Address1_LastWord | Address2_FirstWord | Address2_Suffix |
|---|---|---|---|---|---|
| 3 Steel Street | Saltmarket | 3 Steel | Street | Saltmarket | NaN |
| 1 Arnprior Crescent | Castlemilk | 1 Arnprior | Crescent | Castlemilk | NaN |
| 40 Bargeddie Street Blackhill | Blackhill | 40 Bargeddie Street | Blackhill | Blackhill | NaN |
| NaN | Glasgow City Centre | NaN | NaN | Glasgow | City 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
相关产品推荐
相关产品推荐

