Numpy 填充、降低内存使用和Pandas

Numpy 填充、降低内存使用和Pandas

在本文中,我们将介绍Numpy中的重要函数——fillna和downcast以及在Pandas中如何使用它们。

阅读更多:Numpy 教程

Numpy中的fillna函数

fillna函数是Numpy中的一个重要函数,可以用于将数组中的缺失值用一个标量或指定的值来填充。函数的语法如下:

numpy.fillna(value, method, axis, inplace)
  • value:要用来填充缺失值的标量或指定的值。
  • method:指定用何种方法填充缺失值。
  • axis:指定填充方向。
  • inplace:指定是否原地修改数组。

下面来详细介绍一下这些参数:

填充缺失值

首先,我们可以使用fillna函数来填充缺失值。假设我们有一个包含缺失值的数组a如下:

import numpy as np

a = np.array([[1,2,np.nan],
              [4,np.nan,6],
              [7,8,9]])

我们可以使用以下代码将缺失值全部填充为0:

np.fillna(a, 0)

输出如下:

array([[1., 2., 0.],
       [4., 0., 6.],
       [7., 8., 9.]])

用前一个值填充

除了使用标量填充缺失值之外,我们还可以使用前一个值来填充。方法是将method参数设置为’ffill’。例如,我们有以下数组:

b = np.array([[1,2,np.nan],
              [np.nan,4,5],
              [np.nan,np.nan,9]])

我们可以使用以下代码将缺失值用前一个值填充:

np.fillna(b, method='ffill')

输出如下:

array([[1., 2., nan],
       [1., 4., 5.],
       [1., 4., 9.]])

用后一个值填充

与使用前一个值填充类似,我们可以使用后一个值来填充缺失值。方法是将method参数设置为’bfill’。例如,我们有以下数组:

c = np.array([[1,np.nan,3],
              [4,np.nan,np.nan],
              [7,8,np.nan]])

我们可以使用以下代码将缺失值用后一个值填充:

np.fillna(c, method='bfill')

输出如下:

array([[1., 8., 3.],
       [4., 8., 8.],
       [7., 8., nan]])

在行或列上填充缺失值

我们还可以在行和列上填充缺失值。对于行向数组,我们可以将axis参数设置为1。对于列向数组,我们可以将axis参数设置为0。例如,我们有以下数组:

d = np.array([[1,np.nan,3],
              [4,5,np.nan],
              [7,np.nan,9]])

我们可以使用以下代码在行上填充缺失值:

np.fillna(d, method='ffill', axis=1)

输出如下:

array([[1., 1., 3.],
       [4., 5., 5.],
       [7., 7., 9.]])

我们可以使用以下代码在列上填充缺失值:

np.fillna(d, method='bfill', axis=0)

输出如下:

array([[1., 5., 3.],
       [4., 5., 9.],
       [7., nan, 9.]])

原地修改数组

最后一个参数inplace可以用于指定是否在原地修改数组。默认情况下,该参数为False。例如,我们有以下数组:

e = np.array([[1,np.nan,3],
              [4,np.nan,6],
              [7,np.nan,9]])

我们可以使用以下代码将缺失值用0填充,并原地修改数组:

np.fillna(e, 0, inplace=True)

输出如下:

array([[1., 0., 3.],
       [4., 0., 6.],
       [7., 0., 9.]])

Numpy中的downcast函数

downcast函数是Numpy中的另一个重要函数,可以用于将数组的数据类型降低为更小的数据类型,以降低内存使用。函数的语法如下:

numpy.downcast(a, dtype)
  • a:要降低数据类型的数组。
  • dtype:要降低至的数据类型。

下面来看一下示例:

f = np.array([1, 2, 3], dtype='int64')

print(f.dtype) # 输出 int64

np.downcast(f, 'int32')

print(f.dtype) # 输出 int32

输出结果如下:

int64
int32

可以看到,downcast函数成功将数组f的数据类型从int64降低为了int32。

Pandas中的fillna和downcast函数

Pandas也支持fillna和downcast函数,并且它们的使用方法与Numpy中的函数类似。下面分别介绍一下:

Pandas中的fillna函数

与Numpy中的fillna函数类似,Pandas中的fillna函数也可以用于将缺失值填充为指定的值或使用前一个/后一个值进行填充。假设我们有以下DataFrame:

import pandas as pd

data = {'A': [1, 2, 3, None, 5],
        'B': [None, 7, 8, 9, 10],
        'C': [11, 12, None, None, 15]}

df = pd.DataFrame(data)

我们可以使用以下代码将缺失值全部填充为0:

df.fillna(0)

输出如下:

     A     B     C
0  1.0   0.0  11.0
1  2.0   7.0  12.0
2  3.0   8.0   0.0
3  0.0   9.0   0.0
4  5.0  10.0  15.0

我们可以使用以下代码将缺失值用前一个值填充:

df.fillna(method='ffill')

输出如下:

     A     B     C
0  1.0   NaN  11.0
1  2.0   7.0  12.0
2  3.0   8.0  12.0
3  3.0   9.0  12.0
4  5.0  10.0  15.0

我们可以使用以下代码将缺失值用后一个值填充:

df.fillna(method='bfill')

输出如下:

     A     B     C
0  1.0   7.0  11.0
1  2.0   7.0  12.0
2  3.0   8.0  15.0
3  5.0   9.0  15.0
4  5.0  10.0  15.0

Pandas中的downcast函数

Pandas中的downcast函数可以用于将DataFrame中所有数值列的数据类型降低为更小的数据类型。例如,我们有以下DataFrame:

data = {'A': [1, 2, 3],
        'B': [4.0, 5.0, 6.0],
        'C': [True, False, True]}

df = pd.DataFrame(data)

可以使用以下代码将所有数值列的数据类型降低为int或float:

df[numeric_columns] = df[numeric_columns].apply(pd.to_numeric, downcast='integer')
df[numeric_columns]

输出结果如下:

   A  B      C
0  1  4   True
1  2  5  False
2  3  6   True

可以看到,downcast函数成功将所有数值列的数据类型从float64降低为了int64。

总结

Numpy的fillna和downcast函数可以用于填充缺失值和降低内存使用,而Pandas也支持类似的fillna和downcast函数,并且使用方法也非常类似。在实际的数据分析和处理中,这些函数都是非常重要的。希望本文对大家有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程