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

无法用split拆分数据:ValueError问题及经纬度海拔拆分需求

解决split拆分数据时的ValueError问题

错误原因

你遇到的ValueError: Columns must be same length as key,是因为geo["telemetry"].str.split(": ", expand=True)拆分后得到的列数,和你要赋值的["alt", "lat", "lon"]这3列数量不匹配——要么是部分行拆分后元素数量不足3个,要么是telemetry字段的格式根本不是用": "分隔的三个值。

针对性解决方案

情况1:telemetry是字典结构(最常见场景)

从JSON数据源来看,telemetry大概率是包含altitude、latitude、longitude的字典结构,不需要用split,直接提取字典中的值即可:

sas_url = 'https://telemetria2023.blob.core.windows.net/geolocalizacao/edbaa694-0988-4b38-b45f-10835fc2272f/29/2023/11/02/22/30/66jaxcmrz4gwy'
geo = pd.read_json(sas_url)
geo = pd.DataFrame.from_dict(geo)

# 直接从字典字段提取对应值
geo["alt"] = geo["telemetry"].apply(lambda x: x.get("altitude"))
geo["lat"] = geo["telemetry"].apply(lambda x: x.get("latitude"))
geo["lon"] = geo["telemetry"].apply(lambda x: x.get("longitude"))

或者用更简洁的方式将字典展开为列:

# 将telemetry字典展开为单独列,再提取目标字段
geo = pd.concat([geo, geo["telemetry"].apply(pd.Series)[["altitude", "latitude", "longitude"]]], axis=1)
# 重命名列名
geo.rename(columns={"altitude": "alt", "latitude": "lat", "longitude": "lon"}, inplace=True)

情况2:telemetry是字符串格式(确需split拆分)

如果telemetry确实是字符串,先排查拆分后的列数问题:

# 查看拆分结果的结构和缺失值情况
split_result = geo["telemetry"].str.split(": ", expand=True)
print("拆分后列数:", split_result.shape[1])
print("各列缺失值数量:")
print(split_result.isna().sum())

如果是部分行拆分后列数不足,可限制拆分次数并自动填充缺失值:

# 最多拆分为3列,不足的位置用NaN填充
geo[["alt", "lat", "lon"]] = geo["telemetry"].str.split(": ", n=2, expand=True)

如果是分隔符错误,替换成实际的分隔符(比如逗号、空格等)再执行拆分操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:15:19