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

本文介绍如何使用Pandas处理数据集中的缺失值,包括识别、填充和替换缺失值的方法。详细解释了fillna函数的参数及应用场景,并通过实例展示了不同填充方式的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

### 如何使用 `pandas` 的 `DataFrame.from_dict` 方法 以下是关于如何使用 `pandas.DataFrame.from_dict()` 方法的详细说明以及示例: #### 基本语法 该方法用于从字典对象创建一个 `DataFrame`。其基本语法如下: ```python DataFrame.from_dict(data, orient='columns', dtype=None, columns=None) ``` - **data**: 输入数据,通常是一个 Python 字典。 - **orient**: 数据的方向,默认为 `'columns'`。如果设置为 `'index'`,则键会被视为索引;如果是 `'columns'`,则键会被视为列名[^2]。 - **dtype**: 可选参数,指定每列的数据类型。 - **columns**: 当方向为 `'index'` 时,此参数定义 DataFrame 列标签的值列表。如果与 `'columns'` 方向一起使用,则会抛出 `ValueError` 错误[^1]。 --- #### 示例代码 ##### 示例 1: 默认方向 (`orient='columns'`) 这是最常见的用法,其中字典中的键表示列名,而对应的值则是各列的内容。 ```python import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6]} df = pd.DataFrame.from_dict(data) print(df) ``` 输出结果: ``` A B 0 1 4 1 2 5 2 3 6 ``` 此处,`data` 中的键 `'A'` 和 `'B'` 被识别为两列名称,对应值 `[1, 2, 3]` 和 `[4, 5, 6]` 成为了这两列的内容。 --- ##### 示例 2: 设置方向为 `'index'` 在这种情况下,字典中的键被视作行索引,而不是列名。 ```python import pandas as pd data = {0: {'col1': 1, 'col2': 2}, 1: {'col1': 3, 'col2': 4}} df = pd.DataFrame.from_dict(data, orient='index') print(df) ``` 输出结果: ``` col1 col2 0 1 2 1 3 4 ``` 这里,输入字典的键 `0` 和 `1` 被作为行索引处理,嵌套字典中的键成为列名。 --- ##### 示例 3: 自定义列标签 当 `orient='index'` 并希望自定义列标签时,可以通过传递 `columns` 参数实现。 ```python import pandas as pd data = {0: [1, 2], 1: [3, 4]} df = pd.DataFrame.from_dict(data, orient='index', columns=['X', 'Y']) print(df) ``` 输出结果: ``` X Y 0 1 2 1 3 4 ``` 注意:只有在 `orient='index'` 模式下才能有效利用 `columns` 参数。 --- ##### 示例 4: 处理不完整的字典结构 对于某些情况下的稀疏字典(即并非所有键都具有相同的长度),`from_dict` 同样能够正常工作。 ```python import pandas as pd data = {'A': [1, 2], 'B': [3]} df = pd.DataFrame.from_dict(data) print(df) ``` 输出结果: ``` A B 0 1.0 3.0 1 2.0 NaN ``` 可以看到,在这种情形下缺失的部分自动填充为 `NaN`。 --- #### 注意事项 - 如果尝试在 `orient='columns'` 下传入 `columns` 参数,将会触发错误提示:“If with column direction used together will raise ValueError.” - 对于复杂嵌套字典的情况,建议先将其扁平化再调用 `from_dict` 函数[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M_qsqsqsq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值