关于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
相关产品推荐
相关产品推荐

