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

Python中str.split搭配expand=True仍报‘Columns must be same length as key’错误

解决坐标数据拆分时的「Columns must be same length as key」错误

我太懂这种卡壳的感觉了——明明正则在Regexr里测着没问题,跑代码就报列长度不匹配,简直挠头。咱们一步步拆解问题,搞定它:

先理清核心问题

你的坐标格式是"4.970599399999999, 'lng': -1.6918635",要拆分纬度(第一部分)和经度('lng':后面的数值),但报错说明正则提取后生成的列,和原数据行数量不匹配——大概率是部分数据没被正则匹配到,或者分组逻辑有问题。

排查&解决步骤

1. 先揪出「不听话」的异常数据

Regexr用的是测试样本,但你的数据集里可能藏着格式不一致的行(比如少了逗号、引号格式变了、数值为空)。先筛选出匹配失败的行:

import pandas as pd

# 假设你的坐标列叫coords
# 先把你用的正则写进来
your_pattern = r"你的正则表达式"

# 找出匹配失败的行
bad_rows = df[~df['coords'].str.contains(your_pattern, na=False)]
print(bad_rows)

如果输出有内容,就针对性调整正则(比如兼容单/双引号、多余空格、缺失值)。

2. 优化正则,确保100%覆盖你的数据格式

针对你给出的示例,推荐用这个正则(兼顾空格、单引号、正负数值):

^([\d.-]+),\s*'lng':\s*([\d.-]+)$
  • ([\d.-]+):匹配纬度/经度的数值(包含数字、小数点、负号)
  • \s*:匹配'lng':前后可能存在的空格
  • ^和$:确保匹配整行,避免部分匹配导致的异常

如果数据里有双引号的情况,把'lng'改成["']lng["']就能兼容单双引号。

3. 用str.extract()替代拆分,保证列长度一致

别用str.split()处理这种结构化提取,str.extract()会基于正则分组生成对应列,哪怕匹配失败也会填充NaN,不会出现长度不匹配:

# 提取纬度和经度,生成两列
df[['latitude', 'longitude']] = df['coords'].str.extract(r'^([\d.-]+),\s*\'lng\':\s*([\d.-]+)$', expand=True)

# 检查有没有匹配失败的行(latitude为NaN的就是)
print(df[df['latitude'].isna()])

4. 处理匹配失败的行

如果确实有无法匹配的异常数据,你可以:

  • 手动清理这些行(如果数据量小)
  • 给缺失的经纬度填充默认值(比如df['latitude'] = df['latitude'].fillna(0))
  • 进一步调整正则,覆盖更多格式场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:04:42