pandas DataFrame.fillna()填充缺失函数的使用

  1. Pandas中将如下类型定义为缺失值:
    NaN: ”, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
    ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ”, ‘N/A’, ‘NA’,
    ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’,None

  2. 填充缺失值
    pandas.DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, kwargs)
    value:用于填充的空值的值。
    method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None。定义了填充空值的方法,
    pad / ffill表示用前面行/列的值,填充当前行/列的空值,
    backfill / bfill表示用后面行/列的值,填充当前行/列的空值。
    axis:轴。0或’index’,表示按行删除;1或’columns’,表示按列删除。
    inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操 作,返回值为None。
    limit**:int, default None。如果method被指定,对于连续的空值,这段连续区域,最多填充前 limit 个空值(如果存在多段连续区域,每段最多填充前 limit 个空值)。如果method未被 指定, 在该axis下,最多填充前 limit 个空值(不论空值连续区间是否间断)

downcast:dict, default is None,字典中的项为,为类型向下转换规则。或者为字符串”infer”,此时会在合适的等价类型之间进行向下转换,比如float64 to int64 if possible。

import pandas as pd
import numpy as np

dic = {"a": [8, np.nan, np.nan, 6, 9], "b": pd.Series([np.nan, 6, np.nan, np.nan, 10]), "c": ["qq", np.nan, np.nan, np.nan, 88]}  # DataFrame的col2的"B"和"C"行为nan
df = pd.DataFrame(dic)
print("df = \n", df, sep="")

pd.isna(df) 判断是否是nan
print("pd.isna(df) = \n", pd.isna(df), sep="")

pd.notna(df) 判断是否不是nan
print("pd.notna(df) = \n", pd.notna(df), sep="")

注:inplace默认为False,表示pd.fillna()返回一个新的DataFrame,原df不变(下面均设置为False);如果设置为True则表示在原df上填充,返回None
1. df.fillna(value), df中的所有的nan都用单一的value替换并返回
df2 = df.fillna(10,
                method=None,
                axis=1,  # axis=0或"index":沿着行的向(纵向); axis=1或"column":是沿着列的方向(横向)
                limit=2,   # 在没指定method的情况下,沿着axis指定方向上填充的个数不大于limit设定值
                inplace=False)  # 返回新的DataFrame
print("用10替换后的df2 = \n", df2)

2. 用字典的方式填充nan
dic2 = {"a": 0, "b": 1, "c": 2}  # 字典的key为column
df4 = df.fillna(dic2,
                axis=0,  # 用字典填充时,只能设置为0
                limit=2,  # 最多替换2个
                inplace=False)  # 返回新的DataFrame
print("用字典替换后的df = \n", df4)

3. 用DataFrame替换
df5 = pd.DataFrame(np.arange(10).reshape((5, 2)), columns=["a", "b"])
df6 = df.fillna(df5, inplace=False)  # df的"c"列在df5中不存在,所以不受影响
print("用DataFrame替换后的df = \n", df6)

2.  df.fillna(method="ffill")  method=ffill用前一个值替换nan,method=bfill用后一个值替换nan,如果nan没有前一个或者后一个值,nan将不会被替换
df3 = df.fillna(method="ffill",
                axis=0,  # axis=0或"index":沿着行的前一个或者后一个值替换nan; axis=1或"column":是沿着列的前一个或后一个值替换nan
                limit=1,  # 在指定method的情况下,连续填充的nan数量不超过limit设定值
                inplace=False)  # 返回新的DataFrame
print(df)
print("用前一个值替换后的df = \n", df3)

Original: https://blog.csdn.net/weixin_42118352/article/details/124993079
Author: M_qsqsqsq
Title: pandas DataFrame.fillna()填充缺失函数的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/638612/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球