📅  最后修改于: 2023-12-03 15:40:31.128000             🧑  作者: Mango
在数据分析中,我们经常需要对数据进行清理和整合。pandas 是一个优秀的 Python 数据库工具,它提供了很多强大的数据操作功能。
在这里,我们会介绍如何使用 pandas 检查 nat 条目(NaN/NaT)。NaN 是指不是一个数字(Not a Number),NaT 是指不是一个时间(Not a Time)。
首先,我们需要导入 pandas 包:
import pandas as pd
我们可以使用 numpy 包来创建一些随机的数据:
import numpy as np
data = pd.DataFrame(np.random.randn(5, 3), columns=['a', 'b', 'c'])
data.loc[2, 'a'] = np.nan
data.loc[3, 'c'] = np.nan
data.loc[4, 'b'] = np.nan
data.loc[4, 'c'] = np.nan
这里创建了一个 5 行 3 列的 DataFrame,其中第三行第一列、第四行第三列、第五行第二列和第五行第三列被设置为 NaN。
使用 pandas 的 isna() 函数可以检查 DataFrame 中的 NaN/NaT 值:
print(data.isna())
输出结果为:
a b c
0 False False False
1 False False False
2 True False False
3 False False True
4 False True True
可以看到,这个函数返回了一个和原来 DataFrame 大小一样的布尔型矩阵,表示每个位置上是否为 NaN。
另外,还可以使用 notna() 函数检查非 NaN/NaT 值:
print(data.notna())
输出结果为:
a b c
0 True True True
1 True True True
2 False True True
3 True True False
4 True False False
在实际数据处理中,NaN/NaT 值往往需要被替换为其他值或者被删除。以下是一些常用的处理方法:
使用 fillna() 函数可以将 NaN/NaT 值替换为其他值:
print(data.fillna(0))
输出结果为:
a b c
0 0.831857 -0.276818 -0.992002
1 -0.015747 -2.096371 -0.470327
2 0.000000 -0.385313 0.358443
3 -0.806529 -0.244034 0.000000
4 0.853828 0.000000 0.000000
这里将 NaN/NaT 值全部替换为了 0。
使用 dropna() 函数可以删除包含 NaN/NaT 值的行/列:
print(data.dropna(axis=0))
输出结果为:
a b c
0 0.831857 -0.276818 -0.992002
1 -0.015747 -2.096371 -0.470327
这里删除了包含 NaN/NaT 值的行(axis=0 表示按行处理)。
print(data.dropna(axis=1))
输出结果为:
b
0 -0.276818
1 -2.096371
2 -0.385313
3 -0.244034
4 NaN
这里删除了包含 NaN/NaT 值的列(axis=1 表示按列处理)。
pandas 提供了很多方便的方法来检查和处理 NaN/NaT 值。在实际数据处理中,我们可以根据具体需求来采取相应的处理方法。