在Python Pandas中为列中每个缺失值填充唯一递增值
在Pandas DataFrame中为列内缺失值填充唯一递增值
问题描述
需要为DataFrame每列的缺失值(NA)填充唯一递增值(如na_1、na_2...),尝试用fillna传入列表实现但报错,因为该方法不支持直接传入列表批量填充缺失值。
原始DataFrame
import pandas as pd import numpy as np df = pd.DataFrame({ 'A': [np.nan, 'a', 'b', np.nan], 'B': [np.nan, 'R', 'T', np.nan], 'C': [1, 2, np.nan, np.nan] })
输出:
A B C 0 NaN NaN 1.0 1 a R 2.0 2 b T NaN 3 NaN NaN NaN
解决方案
自定义函数处理每列的缺失值,生成唯一标识后精准赋值:
def fill_unique_na(series): # 筛选当前列的缺失值位置 na_positions = series.isna() # 根据缺失值数量生成唯一填充标签 fill_labels = [f'na_{idx+1}' for idx in range(na_positions.sum())] # 将标签赋值到对应缺失位置 series.loc[na_positions] = fill_labels return series # 对所有列应用填充逻辑 df_processed = df.apply(fill_unique_na)
处理后结果
print(df_processed)
输出:
A B C 0 na_1 na_1 1 1 a R 2 2 b T na_1 3 na_2 na_2 na_2
逻辑说明
- 按列单独处理,先定位所有缺失值的位置;
- 根据列内缺失值的数量,生成连续的唯一标识;
- 直接将标识赋值到缺失位置,绕过
fillna的参数限制,实现精准填充。
内容的提问来源于stack exchange,提问作者Devansh Gupta
相关产品推荐
相关产品推荐

