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

能否在fillna()中使用for循环?用1~100填充100个NaN的代码可行吗?

关于fillna()中使用for循环替换NaN为1~100的问题

嘿,这个问题问得很实际!先直接给结论:你写的for i in range (1,101): df.fillna(i)完全达不到你想要的效果,原因很简单——每次调用df.fillna(i)都会把DataFrame里所有的NaN一次性替换成当前的i,循环跑完后,所有NaN都会变成最后一次的100,根本做不到“依次替换为1~100”。

那该怎么实现你的需求呢?给你两种靠谱的方法:

方法一:定位NaN位置后逐个赋值

这个方法逻辑最直观,先找到所有NaN的位置,再挨个给它们赋值1到100:

import pandas as pd
import numpy as np

# 假设你的DataFrame是df,先获取所有NaN的坐标(行、列)
nan_positions = list(zip(*np.where(df.isna())))

# 确保NaN的数量正好是100个(如果不是,你可以调整range的范围)
for (row, col), num in zip(nan_positions, range(1, 101)):
    df.iloc[row, col] = num

如果你只需要处理某一列的NaN,代码可以更简单:

# 比如处理'目标列'
nan_indices = df[df['目标列'].isna()].index
for idx, num in zip(nan_indices, range(1, len(nan_indices)+1)):
    df.loc[idx, '目标列'] = num

方法二:用迭代器配合applymap(更简洁)

可以用itertools.count创建一个从1开始的迭代器,然后遍历每个元素,遇到NaN就取迭代器的下一个值:

import pandas as pd
from itertools import count

counter = count(1)
df = df.applymap(lambda x: next(counter) if pd.isna(x) else x)

这个方法要注意:如果DataFrame里的NaN数量多于100,它会继续往后数(比如101、102...);如果少于100,迭代器会剩下没用到的数字,根据你的实际情况调整就行。

总结一下,你的初始思路问题出在对fillna()的理解——它是全局替换所有NaN,而不是逐个替换。上面两种方法都能实现“把100个NaN依次替换为1100”的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:52:46