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

Pandas合并DataFrame报错'NoneType'对象无assign属性如何解决

错误诱因

  • 核心错误来自drop方法的inplace=True参数:当该参数设为True时,drop会直接修改原DataFrame对象,返回值为None。你在代码中将返回的None重新赋值给了df变量,后续调用df.assign()时自然会触发NoneType没有assign属性的报错。
  • 你代码中还存在另一个隐性问题:pd.DataFrame.append()属于非原地操作,你当前写法下的df_total.append(df,ignore_index=True)不会修改原有df_total对象,最后得到的总表会是空的;同时append方法在Pandas 2.0及以上版本已经被官方弃用,性能也远低于批量合并的方案。

修复方案

你可以选择两种方式修改drop相关代码,同时调整合并逻辑:

方案1:保留inplace=True,去掉多余赋值

date_num = 0
# 先创建列表存储所有单表,最后一次性合并效率更高
df_list = []

for i in dataframe_csv:
    df = pd.read_csv(i)
    # 去掉赋值,直接在原df上执行删除
    df.drop(index=df.index[0], axis=0, inplace=True)
    df = df.assign(Date = date_list[date_num])
    date_num += 1
    df_list.append(df)

# 一次性合并所有表
df_total = pd.concat(df_list, ignore_index=True)

方案2:去掉inplace=True,接收返回的新DataFrame

date_num = 0
df_list = []

for i in dataframe_csv:
    df = pd.read_csv(i)
    # 不设置inplace,直接接收删除后的新df
    df = df.drop(index=df.index[0], axis=0)
    df = df.assign(Date = date_list[date_num])
    date_num += 1
    df_list.append(df)

df_total = pd.concat(df_list, ignore_index=True)

两种方案效果一致,相比你原有循环中反复append总表的写法,先存到列表最后一次性合并的性能提升会非常明显,尤其是数据量较大时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:48:04