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

pandas遍历DataFrame按列前缀筛选行出现拼接错误问题咨询

报错原因

你的代码存在2个核心逻辑错误,直接触发拼接类报错:

  • 循环中取出的x是ROUTE_ID字段的单个字符串值,不是DataFrame或Series对象,本身不存在append()方法,调用时会直接抛出属性错误。
  • 就算忽略方法归属问题,你对append()的调用逻辑完全写反:pandas旧版本的df.append()是将传入的对象拼接在调用方法的DataFrame后,你写的x.append(mnlrs)相当于要把整个原始表拼到单个字符串后面,逻辑完全不成立。且append()方法在pandas 1.4.0版本后已被标记废弃,2.0及以上版本直接移除,不建议继续使用。
可行解决方案

优先使用向量化筛选(最高效、最适配geopandas场景)
不需要预创建空DataFrame,也不需要写for循环逐行判断,直接用pandas/geopandas原生的字符串向量化操作做布尔索引筛选即可,运行效率比逐行循环高数十倍,且不会丢失GeoDataFrame的空间属性:

# 直接筛选ROUTE_ID以01/02/03开头的行
mnlrshwy = mnlrs[mnlrs['ROUTE_ID'].str.startswith(('01', '02', '03'))].copy()
# 若需要仅保留指定的5个字段,追加选列逻辑即可
mnlrshwy = mnlrshwy[['ROUTE_ID','FROM_MEASU','TO_MEASURE','STREET_PRE','BASE_NAME']]

如果坚持使用循环追加逻辑(不推荐,效率极低)
如果一定要用逐行判断+追加的逻辑实现,不要用已废弃的append(),改用pd.concat做拼接,且循环时要取整行数据而非仅取ROUTE_ID的单个值:

import pandas as pd
mnlrshwy = pd.DataFrame(columns=['ROUTE_ID','FROM_MEASU','TO_MEASURE','STREET_PRE','BASE_NAME'])
for idx, row in mnlrs.iterrows():
    if row['ROUTE_ID'].startswith(('01','02','03')):
        # 单行转置为DataFrame格式后再拼接
        mnlrshwy = pd.concat([mnlrshwy, row.to_frame().T], ignore_index=True)

注意:geopandas读取的shapefile生成的是带空间几何列的GeoDataFrame,逐行拼接的写法很容易丢失空间信息、把GeoDataFrame转为普通pandas DataFrame,非特殊场景不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:18:28