pandas 替换nan

pandas 替换nan

pandas 替换nan

1. 介绍

在数据处理中,经常会遇到缺失值的情况,即数据中存在空值或NaN(Not a Number)的情况。这些缺失值可能会影响数据分析的结果。而pandas是Python中一个强大的数据处理库,提供了直观灵活的数据结构和数据操作方法。其中就包括了替换缺失值的功能,可以帮助我们更好地处理数据。

本文将详细介绍pandas中替换NaN的方法和技巧,帮助读者更好地理解和应用。

2. pandas替换NaN的方法

2.1 fillna()方法

pandas中的fillna()方法可以用来替换缺失值。它的基本用法如下:

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

其中,常用的参数包括:

  • value: 要替换的值,可以是一个常数或者一个字典。如果是常数,则所有的NaN都会被替换为该常数;如果是字典,则根据字典的键值对替换。
  • method: 填充缺失值的方法,可以是’ffill’(用前一个非缺失值替换),’bfill’(用后一个非缺失值替换)。
  • axis: 指定要填充的轴,0表示行,1表示列。
  • inplace: 是否修改原始数据,默认为False。
  • limit: 在指定轴上连续填充的最大次数。
  • downcast: 指定数据类型,可以是’infer’(自动推断)或其他的数据类型。

接下来我们通过几个示例来展示使用fillna()方法替换NaN的操作。

2.2 示例代码1:用常数替换NaN

首先,我们导入pandas库和创建一个包含NaN的DataFrame。

import pandas as pd
import numpy as np

data = {'A': [1, 2, np.nan, 4, 5],
        'B': [6, np.nan, 8, np.nan, 10],
        'C': [np.nan, 12, 13, 14, 15]}
df = pd.DataFrame(data)
print(df)

运行结果如下:

     A     B     C
0  1.0   6.0   NaN
1  2.0   NaN  12.0
2  NaN   8.0  13.0
3  4.0   NaN  14.0
4  5.0  10.0  15.0

我们可以使用fillna()方法将NaN替换为指定的常数。下面的示例中,我们将NaN替换为0。

df.fillna(0, inplace=True)
print(df)

运行结果如下:

     A     B     C
0  1.0   6.0   0.0
1  2.0   0.0  12.0
2  0.0   8.0  13.0
3  4.0   0.0  14.0
4  5.0  10.0  15.0

可以看到,所有的NaN都被替换为了0。

2.3 示例代码2:用前一个非缺失值替换NaN

接下来,我们使用前一个非缺失值替换NaN。下面的示例中,我们使用fillna()方法用前一个非缺省值替换NaN。

df.fillna(method='ffill', inplace=True)
print(df)

运行结果如下:

     A     B     C
0  1.0   6.0   0.0
1  2.0   6.0  12.0
2  2.0   8.0  13.0
3  4.0   8.0  14.0
4  5.0  10.0  15.0

可以看到,第一列的NaN被前一个非缺失值1替换,第二列的NaN被前一个非缺失值6替换,第三列的NaN被前一个非缺失值0替换。

2.4 示例代码3:用后一个非缺失值替换NaN

除了使用前一个非缺失值替换NaN,我们也可以使用后一个非缺失值进行替换。下面的示例中,我们使用fillna()方法用后一个非缺省值替换NaN。

df.fillna(method='bfill', inplace=True)
print(df)

运行结果如下:

     A     B     C
0  1.0   6.0   0.0
1  2.0   8.0  12.0
2  4.0   8.0  13.0
3  4.0  10.0  14.0
4  5.0  10.0  15.0

可以看到,第一列的NaN被后一个非缺失值2替换,第二列的NaN被后一个非缺失值8替换,第三列的NaN被后一个非缺失值12替换。

2.5 示例代码4:根据字典替换NaN

除了使用常数或者前一个/后一个非缺失值进行替换,我们还可以根据字典进行替换。下面的示例中,我们使用fillna()方法将列B中的NaN替换为字典中对应的值。

values = {'B': 20}
df.fillna(value=values, inplace=True)
print(df)

运行结果如下:

     A     B     C
0  1.0   6.0   0.0
1  2.0  20.0  12.0
2  4.0   8.0  13.0
3  4.0  20.0  14.0
4  5.0  10.0  15.0

可以看到,第二列的NaN被替换为了字典中对应的值20。

2.6 示例代码5:按轴填充缺失值

当数据处理时,我们有时候需要按行或列填充缺失值。在fillna()方法中,我们可以通过axis参数指定要填充的轴。下面的示例中,我们按行填充缺失值。

df.fillna(method='ffill', axis=0, inplace=True)
print(df)

运行结果如下:

     A     B     C
0  1.0   6.0   0.0
1  2.0   6.0  12.0
2  2.0   8.0  13.0
3  4.0   8.0  14.0
4  5.0  10.0  15.0

可以看到,按行填充后,第一行的NaN被前一个非缺失值替换,第二行的NaN被前一个非缺失值替换,以此类推。

2.7 示例代码6:限制填充次数

在使用fillna()方法填充缺失值时,我们可以通过limit参数来限制连续填充的次数。下面的示例中,我们将limit参数设置为1,限制每列连续填充一次。

df.fillna(method='ffill', limit=1, inplace=True)
print(df)

运行结果如下:

     A     B     C
0  1.0   6.0   0.0
1  2.0   6.0  12.0
2  2.0   8.0  13.0
3  4.0   8.0  14.0
4  5.0  10.0  15.0

可以看到,每列只填充了一次,后续的NaN没有再进行填充。

2.8 示例代码7:替换特定值

有时候,我们希望将除了NaN之外的特定值替换为其他值。在fillna()方法中,我们可以使用replace()方法来实现。下面的示例中,我们将除了NaN之外的值为6的元素替换为999。

df.replace(to_replace=6, value=999, inplace=True)
print(df)

运行结果如下:

     A       B     C
0  1.0   999.0   0.0
1  2.0   999.0  12.0
2  2.0     8.0  13.0
3  4.0   999.0  14.0
4  5.0    10.0  15.0

可以看到,除了NaN,值为6的元素都被替换为了999。

2.9 示例代码8:使用inplace进行原地替换

在使用fillna()方法时,默认情况下原始的DataFrame不会被修改,而是返回一个新的DataFrame。如果想要在原始DataFrame上进行操作,可以将inplace参数设置为True。下面的示例中,我们先创建一个副本df2用于演示。

df2 = df.copy()
df2.fillna(0, inplace=True)
print(df2)

运行结果如下:

     A       B     C
0  1.0   999.0   0.0
1  2.0   999.0  12.0
2  2.0     8.0  13.0
3  4.0   999.0  14.0
4  5.0    10.0  15.0

可以看到,副本df2中的NaN被替换为了0。

3. 总结

本文介绍了pandas中替换NaN的方法,包括使用fillna()方法按指定的常数、前一个非缺失值、后一个非缺失值替换NaN,使用字典替换NaN,按轴填充缺失值,限制填充次数,替换特定值以及进行原地替换的方法。

通过掌握这些替换NaN的方法,我们可以更好地处理数据中的缺失值,确保数据分析的准确性和可靠性。同时,在不同的场景下选择合适的替换方法,能够提高数据处理的效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程