pandas 过滤nan

在处理数据时,经常会遇到一些缺失值(NaN)。在pandas库中,我们可以通过一些方法来过滤这些NaN值,使得数据处理更加准确和方便。
什么是NaN?
NaN是”Not a Number”的缩写,表示缺失值或者不可用值。在pandas中,NaN通常用来表示缺失值。
创建包含NaN的DataFrame
让我们首先创建一个包含NaN值的DataFrame,以便于我们后续的操作。我们可以使用字典的方式来创建DataFrame,例如:
import pandas as pd
import numpy as np
data = {'A': [1, 2, np.nan, 4],
'B': [np.nan, 5, 6, np.nan],
'C': [7, 8, 9, 10]}
df = pd.DataFrame(data)
print(df)
运行以上代码,我们将得到如下输出:
A B C
0 1.0 NaN 7
1 2.0 5.0 8
2 NaN 6.0 9
3 4.0 NaN 10
上述DataFrame包含了一些NaN值,我们接下来将介绍如何处理这些NaN值。
检测NaN值
在处理含有NaN值的数据时,首先我们需要了解哪些位置存在NaN值。我们可以使用isnull()方法来检测DataFrame中的NaN值:
print(df.isnull())
运行以上代码,得到输出如下:
A B C
0 False True False
1 False False False
2 True False False
3 False True False
此时,我们可以看到哪些位置存在NaN值。
删除含有NaN值的行
如果我们希望删除含有NaN值的行,我们可以使用dropna()方法。默认情况下,dropna()会删除包含任何NaN值的行:
df_filtered = df.dropna()
print(df_filtered)
运行以上代码,得到如下输出:
A B C
1 2.0 5.0 8
可以看到,只有第二行的数据被保留,而其他含有NaN值的行被删除了。
删除含有NaN值的列
类似地,如果我们想删除含有NaN值的列,我们可以通过设置axis=1参数来实现:
df_filtered = df.dropna(axis=1)
print(df_filtered)
运行以上代码,得到如下输出:
C
0 7
1 8
2 9
3 10
可以看到,只有列’C’被保留下来,而其他含有NaN值的列被删除了。
填充NaN值
有时候,我们并不想删除含有NaN值的行或列,而是希望用某个特定的值来填充这些NaN。我们可以使用fillna()方法来实现这一目的。
df_filled = df.fillna(value=0)
print(df_filled)
运行以上代码,得到如下输出:
A B C
0 1.0 0.0 7
1 2.0 5.0 8
2 0.0 6.0 9
3 4.0 0.0 10
通过填充NaN值,我们将NaN值替换为了0。
仅对某一列填充NaN值
有时候,我们只想对某一列进行NaN值填充。我们可以通过指定列名来实现这一目的。
# 对列'A'填充为100
df['A'] = df['A'].fillna(value=100)
print(df)
运行以上代码,得到的输出如下:
A B C
0 1.0 NaN 7
1 2.0 5.0 8
2 100.0 6.0 9
3 4.0 NaN 10
可以看到,只有列’A’中的NaN值被填充为了100。
其他处理NaN值的方法
除了上述介绍的方法外,pandas还提供了一些其他处理NaN值的方法,比如interpolate()方法可以根据已有数据进行插值填充。此外,我们还可以使用replace()方法来替换特定值为NaN值。
总的来说,处理NaN值是数据处理中的常见任务,我们需要根据具体情况选择合适的处理方式,使得数据分析和建模更加准确和有效。
极客教程