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

如何用pandas df.concat替代带自定义索引的.append方法?

替换Pandas已弃用的.append方法(自定义索引场景)

问题背景

需要替换Pandas中即将弃用的.append方法,原代码读取目录下所有.shp文件,从文件名提取日期和自定义索引nom_parcelle,确保索引不重复后添加行到DataFrame。原代码逻辑正常,但用pd.concat替代时无法正确保留索引。

原代码:

df = pd.DataFrame(columns = ['date','fichier'])
for i in glob.glob("*.shp"):
    nom_parcelle = i.split("_")[2]
    if not nom_parcelle in df.index:
        date_recolte = i.split("_")[-1]
        new_row = pd.Series(data={'date':date_recolte.split(".")[0], 'fichier':i}, name = nom_parcelle)
        df = df.append(new_row, ignore_index=False)

解决方案

核心是避免循环内重复拼接DataFrame,先收集所有符合条件的行(以Series或单行DataFrame形式),最后一次性用pd.concat合并,同时维护索引集合避免重复。

方法1:收集Series后合并

import pandas as pd
import glob

series_list = []
existing_indexes = set()

for i in glob.glob("*.shp"):
    nom_parcelle = i.split("_")[2]
    if nom_parcelle not in existing_indexes:
        date_recolte = i.split("_")[-1]
        new_row = pd.Series(
            data={'date': date_recolte.split(".")[0], 'fichier': i},
            name=nom_parcelle
        )
        series_list.append(new_row)
        existing_indexes.add(nom_parcelle)

# 合并所有Series并转置为行结构
df = pd.concat(series_list, axis=1).T

方法2:收集单行DataFrame后合并

import pandas as pd
import glob

df_list = []
existing_indexes = set()

for i in glob.glob("*.shp"):
    nom_parcelle = i.split("_")[2]
    if nom_parcelle not in existing_indexes:
        date_recolte = i.split("_")[-1]
        # 创建带自定义索引的单行DataFrame
        new_df = pd.DataFrame(
            {'date': [date_recolte.split(".")[0]], 'fichier': [i]},
            index=[nom_parcelle]
        )
        df_list.append(new_df)
        existing_indexes.add(nom_parcelle)

# 直接合并所有单行DataFrame
df = pd.concat(df_list)

关键说明

  1. 避免循环内拼接:原代码循环中每次.append都会生成新DataFrame,效率低下;先收集再一次性合并是Pandas推荐的高效写法。
  2. 索引去重逻辑:用existing_indexes集合跟踪已添加的索引,和原代码逻辑完全一致,确保不会重复添加相同nom_parcelle的行。
  3. 索引保留:无论是Series的name还是单行DataFrame的index,都能被pd.concat正确识别为最终DataFrame的索引,无需额外设置参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:55:18