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)
下面是对这些参数的解释:
- 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)
输出:
[ 1. 2. -1. 4. -1.]
在上面的示例中,数组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)
输出:
[ 1. 2. -1. 4. -2.]
在上面的示例中,数组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)
输出:
[ 1. 2. 10. 4. 20.]
在上面的示例中,数组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)
输出:
A B
0 1.0 4.0
1 0.0 5.0
2 3.0 10.0
在上面的示例中,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)
输出:
[1. 1. 2. 3. 3. 4.]
[1. 2. 2. 3. 4. 4.]
在上面的示例中,数组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)
输出:
[[1. 0. 0.]
[4. 0. 0.]]
在上面的示例中,数组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)
输出:
[ 1. 0. 0. 2. 3. 0. 0.]
在上面的示例中,数组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)
输出:
[1 2 0]
int32
在上面的示例中,数组arr中的缺失值被填充为整数类型。
8. 总结
本文详续上,我们详细介绍了numpy fillna函数的各个参数的用法和示例代码。通过使用value参数,我们可以灵活地填充缺失值,可以是具体的数值、字典、序列或DataFrame等数据结构。我们还了解了method参数的使用方式,可以选择使用前向填充或后向填充的方法。此外,我们学习了axis参数的作用,可以指定按照哪个轴进行填充;limit参数可以限制每个轴上连续缺失值的最大填充数量;downcast参数可以指定返回数组的数据类型。
需要注意的是,fillna函数会返回新的填充后的数组,而不会对原始数组进行修改。如果想就地修改原始数组,可以将inplace参数设置为True。
除了fillna函数,numpy还提供了其他一些处理缺失值的函数,例如numpy.nanmean、numpy.nanstd等。这些函数可以方便地处理含有缺失值的数组,并进行统计分析。
在实际的数据处理和分析中,填充缺失值是一个常见的需求。使用numpy fillna函数可以方便地处理缺失值,提高数据处理的效率和准确性。