遍历DataFrame列表执行fillna清除NaN操作未生效如何解决
问题原因
- 遍历语句语法错误:你编写的
for i in ListOfDFs[i]存在逻辑问题,循环启动时变量i还未被定义,无法作为索引读取列表元素,直接遍历列表元素不需要加下标,正确写法为for i in ListOfDFs。 - 赋值逻辑无效:循环中的变量
i只是指向列表内DataFrame对象的临时引用,执行i = i.fillna("")时,仅会让临时变量i指向fillna返回的新DataFrame对象,既不会修改列表中存储的原元素,也不会修改你提前定义的DP、SMP等独立变量。此外fillna默认返回新对象,不会修改原对象本身。
正确实现方式
方案1:生成新的处理后列表(不修改原始DataFrame)
如果需要保留原始未处理的DataFrame,可直接通过列表推导式生成新的处理后列表:
processed_ListOfDFs = [df.fillna("") for df in ListOfDFs]
如果要直接修改原列表的存储内容,可通过下标遍历赋值:
for idx in range(len(ListOfDFs)): ListOfDFs[idx] = ListOfDFs[idx].fillna("")
方案2:直接修改原始DataFrame对象(同步更新DP、SMP等独立变量)
如果不需要保留原始NaN数据,可通过inplace=True参数直接在原对象上修改,执行后你定义的DP、SMP等独立变量的内容会同步更新:
for df in ListOfDFs: df.fillna("", inplace=True)
内容的提问来源于stack exchange,提问作者Rob de Leeuw
相关产品推荐
相关产品推荐

