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

关于pandas中fillna用mode()[0]的疑问及整表填充方法

Pandas DataFrame用众数填充NaN的问题解答

问题1:df['col1'].mode()[0]中[0]的作用

df['col1'].mode()返回的是Pandas Series对象——哪怕列里只有一个众数,它也会以带索引的Series形式输出。比如你示例中的age列,执行df['age'].mode()会得到:

0    3.5
dtype: float64

而fillna()方法需要传入单个标量值(数值/字符串)来填充空值,直接传Series会触发参数类型错误。[0]的作用就是从这个Series里取出具体的众数数值,让fillna()能正常接收并使用该值完成填充。

问题2:一次性对整个DataFrame执行众数填充

完全可以,一行代码就能实现批量填充:

df_filled = df.fillna(df.mode().iloc[0])

代码逻辑说明:

  • df.mode():生成一个新的DataFrame,每行对应原DataFrame某列的众数(如果某列存在多个众数,会生成多行结果)。
  • .iloc[0]:取出众数DataFrame的第一行,得到一个Series——索引是原DataFrame的列名,值对应各列的第一个众数。
  • fillna():自动按列匹配,将原DataFrame中每列的NaN替换为该列对应的众数值。

完整示例代码

import pandas as pd
import numpy as np

data = {
    'birds': ['Cranes', 'Cranes', 'plovers', 'spoonbills', 'spoonbills', 'Cranes', 'plovers', 'Cranes', 'spoonbills', 'spoonbills', 'Cranes'], 
    'age': [3.5, 4, 1.5, np.nan, 6, 3, 5.5, np.nan, 8, 4, 3.5], 
    'visits': [2, 4, 3, 4, 3, 4, 2, 2, 3, 2, 2], 
    'priority': ['yes', 'yes', 'no', np.nan, 'no', 'no', 'no', 'yes', 'no', 'no','yes']
}
df = pd.DataFrame(data)

# 批量填充所有列的NaN为对应列的众数
df_filled = df.fillna(df.mode().iloc[0])
print(df_filled)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:40:08