numpy fillna

numpy fillna

numpy fillna

1. 引言

在数据分析和处理过程中,经常会遇到数据缺失的情况。缺失的数据可能对后续的统计分析和机器学习等任务产生不良影响。为了解决这个问题,numpy提供了fillna函数来处理缺失值。本文将详细介绍numpy fillna函数的用法和示例。

2. fillna函数的基本用法

fillna函数的文档定义如下:

numpy.ndarray.fillna(value, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
Python

下面是对这些参数的解释:

  • value: 用于填充缺失值的值。可以是一个具体的数值,也可以是一个字典、序列或DataFrame等数据结构。
  • method: 指定填充缺失值的方法。默认为None,即不使用任何方法。
  • axis: 指定按照哪个轴进行填充。默认为None,即按照flatten后的数组填充。
  • inplace: 是否对原始数组进行就地修改。默认为False,即返回新的填充后的数组。
  • limit: 指定每个轴上的连续缺失值的最大填充数量。
  • downcast: 指定返回数组的数据类型,可选值有’integer’、’signed’、’unsigned’、’float’、’complex’等。

现在让我们逐个解释这些参数的具体用法,并通过示例代码进行演示。

3. value参数的用法

value参数用于指定填充缺失值的值。它可以是一个具体的数值,也可以是一个字典、序列或DataFrame等数据结构。

3.1 填充数值类型

当value参数是一个具体的数值时,fillna函数会使用该数值填充所有缺失值。

示例代码:

import numpy as np

arr = np.array([1, 2, np.nan, 4, np.nan])
filled_arr = np.nan_to_num(arr, nan=-1)
print(filled_arr)
Python

输出:

[ 1.  2. -1.  4. -1.]
Python

在上面的示例中,数组arr中的缺失值被填充为-1。

3.2 填充字典类型

当value参数是一个字典时,fillna函数可以根据字典中的键值对,将对应的缺失值填充为相应的值。

示例代码:

import numpy as np

arr = np.array([1, 2, np.nan, 4, np.nan])
filled_arr = np.nan_to_num(arr, nan={2: -1, 4: -2})
print(filled_arr)
Python

输出:

[ 1.  2. -1.  4. -2.]
Python

在上面的示例中,数组arr中的缺失值根据字典nan的键值对进行填充。

3.3 填充序列类型

当value参数是一个序列时,fillna函数会将该序列的值循环使用,填充每个缺失值。

示例代码:

import numpy as np

arr = np.array([1, 2, np.nan, 4, np.nan])
filled_arr = np.nan_to_num(arr, nan=[10, 20])
print(filled_arr)
Python

输出:

[ 1.  2. 10.  4. 20.]
Python

在上面的示例中,数组arr中的缺失值使用序列[10, 20]循环填充。

3.4 填充DataFrame类型

当value参数是一个DataFrame时,fillna函数会根据DataFrame中的值填充缺失值。

示例代码:

import numpy as np
import pandas as pd

data = pd.DataFrame({'A': [1, np.nan, 3], 'B': [4, 5, np.nan]})
filled_data = data.fillna(value={'A': 0, 'B': 10})
print(filled_data)
Python

输出:

     A     B
0  1.0   4.0
1  0.0   5.0
2  3.0  10.0
Python

在上面的示例中,DataFrame中的缺失值根据字典的键值对进行填充。

4. method参数的用法

method参数用于指定填充缺失值的方法。常用的方法有’ffill’和’bfill’,分别表示使用前向填充和后向填充的方式。

示例代码:

import numpy as np

arr = np.array([1, np.nan, 2, 3, np.nan, 4])
filled_arr_ffill = np.nan_to_num(arr, method='ffill')
filled_arr_bfill = np.nan_to_num(arr, method='bfill')
print(filled_arr_ffill)
print(filled_arr_bfill)
Python

输出:

[1. 1. 2. 3. 3. 4.]
[1. 2. 2. 3. 4. 4.]
Python

在上面的示例中,数组arr中的缺失值分别使用前向填充和后向填充的方式进行填充。

5. axis参数的用法

axis参数用于指定按照哪个轴进行填充。默认情况下,fillna函数按照flatten后的数组填充。

示例代码:

import numpy as np

arr = np.array([[1, np.nan, np.nan], [4, np.nan, np.nan]])
filled_arr = np.nan_to_num(arr, axis=1)
print(filled_arr)
Python

输出:

[[1. 0. 0.]
 [4. 0. 0.]]
Python

在上面的示例中,数组arr中的缺失值按照行(轴1)进行填充。

6. limit参数的用法

limit参数用于指定每个轴上的连续缺失值的最大填充数量。

示例代码:

import numpy as np

arr = np.array([1, np.nan, np.nan, 2, 3, np.nan, np.nan])
filled_arr = np.nan_to_num(arr, limit=1)
print(filled_arr)
Python

输出:

[ 1.  0.  0.  2.  3.  0.  0.]
Python

在上面的示例中,数组arr中每个轴上的连续缺失值最多只能填充1个。

7. downcast参数的用法

downcast参数用于指定返回数组的数据类型。

示例代码:

import numpy as np

arr = np.array([1, 2, np.nan])
filled_arr = np.nan_to_num(arr, downcast='integer')
print(filled_arr)
print(filled_arr.dtype)
Python

输出:

[1 2 0]
int32
Python

在上面的示例中,数组arr中的缺失值被填充为整数类型。

8. 总结

本文详续上,我们详细介绍了numpy fillna函数的各个参数的用法和示例代码。通过使用value参数,我们可以灵活地填充缺失值,可以是具体的数值、字典、序列或DataFrame等数据结构。我们还了解了method参数的使用方式,可以选择使用前向填充或后向填充的方法。此外,我们学习了axis参数的作用,可以指定按照哪个轴进行填充;limit参数可以限制每个轴上连续缺失值的最大填充数量;downcast参数可以指定返回数组的数据类型。

需要注意的是,fillna函数会返回新的填充后的数组,而不会对原始数组进行修改。如果想就地修改原始数组,可以将inplace参数设置为True。

除了fillna函数,numpy还提供了其他一些处理缺失值的函数,例如numpy.nanmean、numpy.nanstd等。这些函数可以方便地处理含有缺失值的数组,并进行统计分析。

在实际的数据处理和分析中,填充缺失值是一个常见的需求。使用numpy fillna函数可以方便地处理缺失值,提高数据处理的效率和准确性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册