您的位置:

详解pandas fillna 指定列

一、fillna的基础用法

fillna是pandas中一个常用的函数,它用于填充数据框或序列中的空值。我们先来看一个简单的案例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1,2,np.nan,4,np.nan],
                   'B': [5,np.nan,7,np.nan,9]})
df.fillna(0)

上述案例中,我们创建了一个包含两列的数据框。其中,'A'列和'B'列都包含了一些空值。接着,我们使用fillna函数,将数据框中的所有空值都填充为0。运行结果如下:

     A    B
0  1.0  5.0
1  2.0  0.0
2  0.0  7.0
3  4.0  0.0
4  0.0  9.0

从运行结果中可以看出,fillna函数很容易地实现了空值的填充。但是,如果我们想要指定某一列进行填充,该如何操作呢?

二、指定列进行填充

在默认情况下,fillna函数会将整个数据框中的空值都填充为同一个值。但是,在有些情况下,我们需要按照不同的列,分别填充不同的值。这时,我们可以使用fillna函数的subset参数来指定需要填充的列。下面是一个示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2, np.nan, 4, np.nan],
                   'B': [5, np.nan, 7, np.nan, 9],
                   'C': [np.nan, 3, 6, 8, 10]})
df.fillna({'B':0})

在上述案例中,我们创建了一个包含'A'、'B'、'C'三列的数据框。接着,我们使用fillna函数,并指定subset参数为'B',将数据框中的空值都在'B'列中填充为0。运行结果如下:

     A    B     C
0  1.0  5.0   NaN
1  2.0  0.0   3.0
2  NaN  7.0   6.0
3  4.0  0.0   8.0
4  NaN  9.0  10.0

从运行结果中可以看出,fillna函数在指定列进行填充时,可以实现按列分别填充不同的值的效果。

三、指定不同的填充方式

在默认情况下,fillna函数会将空值填充为指定的固定值。但是,在一些情况下,我们需要根据不同的列,使用不同的填充方式。比如,我们可以使用前向填充、后向填充或者使用插值的方式进行填充。下面是详解:

1. 前向填充

使用fillna函数的ffill参数,可以实现前向填充。即用该列中前一个非空的值进行填充。下面是一个示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2, np.nan, 4, np.nan],
                   'B': [5, np.nan, 7, np.nan, 9],
                   'C': [np.nan, 3, 6, 8, 10]})
df.fillna(method='ffill')

在上述案例中,我们创建了一个包含'A'、'B'、'C'三列的数据框。接着,我们使用fillna函数,并指定method参数为'ffill',将数据框中的空值都进行前向填充。运行结果如下:

     A    B     C
0  1.0  5.0   NaN
1  2.0  5.0   3.0
2  2.0  7.0   6.0
3  4.0  7.0   8.0
4  4.0  9.0  10.0

从运行结果中可以看出,fillna函数成功地将数据框中的空值进行了前向填充。

2. 后向填充

使用fillna函数的bfill参数,可以实现后向填充。即用该列中后一个非空的值进行填充。下面是一个示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2, np.nan, 4, np.nan],
                   'B': [5, np.nan, 7, np.nan, 9],
                   'C': [np.nan, 3, 6, 8, 10]})
df.fillna(method='bfill')

在上述案例中,我们创建了一个包含'A'、'B'、'C'三列的数据框。接着,我们使用fillna函数,并指定method参数为'bfill',将数据框中的空值都进行后向填充。运行结果如下:

     A    B     C
0  1.0  5.0   3.0
1  2.0  7.0   3.0
2  4.0  7.0   6.0
3  4.0  9.0   8.0
4  NaN  9.0  10.0

从运行结果中可以看出,fillna函数成功地将数据框中的空值进行了后向填充。

3. 插值填充

使用fillna函数的method参数并指定为插值方法,可以实现插值填充。pandas提供了多种插值算法,如线性插值、二次插值、三次插值等。下面是一个示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, np.nan, 3, np.nan, 5],
                   'B': [10, np.nan, np.nan, 40, 50]})
df.interpolate(method='quadratic')

在上述案例中,我们创建了一个包含'A'、'B'两列的数据框。接着,我们使用fillna函数,并指定method参数为'quadratic',将数据框中的空值都使用二次插值进行填充。运行结果如下:

          A          B
0  1.000000  10.000000
1  1.666667  20.277778
2  3.000000  29.444444
3  4.000000  40.000000
4  5.000000  50.000000

从运行结果中可以看出,fillna函数成功地将数据框中的空值进行了插值填充。

四、结语

pandas中的fillna函数是一个非常实用的函数。通过对该函数的学习,我们可以轻松地实现数据框中的空值填充操作。在实际应用中,我们可以根据需求,选择不同的填充方式和填充值,以满足不同的数据分析需求。