介绍
在数据处理过程中,缺失数据或NaN值是比较常见的情况。在 Pandas 中,我们可以使用 dropna() 方法删除包含 NaN 值的行或列,来减少数据异常值对于统计分析、建模以及预测的影响。
正文
一、什么是 NaN 值
NaN 值是表示缺少数据或不适用数据的一种标签。常见的情况是数据没有被观测或没有被记录。在 Pandas 中,NaN表示Not a Number,可以用 np.NaN 或 pd.NaT 表示。
二、使用 dropna 删除包含 NaN 值的行
import pandas as pd import numpy as np df = pd.DataFrame([[np.nan, 2, np.nan, 0], [3, 4, np.nan, 1], [np.nan, np.nan, np.nan, 5], [8, 7, 6, 4], [5, np.nan, np.nan, np.nan]], columns=list('ABCD')) # 删除包含 NaN 值的行 df.dropna()
上述示例中,我们创建了一个包含 NaN 值的 DataFrame,其中又包含一些 NaN 值。于是我们使用 dropna() 方法将包含 NaN 值的行删除。
三、使用 dropna 删除包含 NaN 值的列
import pandas as pd import numpy as np df = pd.DataFrame([[np.nan, 2, np.nan, 0], [3, 4, np.nan, 1], [np.nan, np.nan, np.nan, 5], [8, 7, 6, 4], [5, np.nan, np.nan, np.nan]], columns=list('ABCD')) # 删除包含 NaN 值的列 df.dropna(axis=1)
上述示例中,我们使用 dropna() 方法将包含 NaN 值的列删除。需要注意的是,在调用 dropna() 方法时,默认为 axis=0,即删除行,若需要删除列,则需要将 axis 设置为 1。
四、使用 thresh 参数删除包含 NaN 值的行或列
import pandas as pd import numpy as np df = pd.DataFrame([[np.nan, 2, np.nan, 0], [3, 4, np.nan, 1], [np.nan, np.nan, np.nan, 5], [8, 7, 6, 4], [5, np.nan, np.nan, np.nan]], columns=list('ABCD')) # 删除列中非 NaN 值小于 3 的列 df.dropna(thresh=3, axis=1)
在某些情况下,可能需要删除一些非 NaN 值较少的行或列。这时可以使用 thresh 参数来控制删除条件。例如,上述示例中,我们使用了 thresh=3,即删除列中非 NaN 值小于 3 的列。
五、使用 inplace 参数直接在原数据上删除
import pandas as pd import numpy as np df = pd.DataFrame([[np.nan, 2, np.nan, 0], [3, 4, np.nan, 1], [np.nan, np.nan, np.nan, 5], [8, 7, 6, 4], [5, np.nan, np.nan, np.nan]], columns=list('ABCD')) # 直接在原数据上删除所有包含 NaN 值的行 df.dropna(inplace=True)
通过设置 inplace 参数为 True,可以直接在原数据上进行删除操作,且不会返回一个新的 DataFrame。
结论
使用 dropna() 方法可以快速有效地删除包含 NaN 值的行或列,从而避免统计分析、建模以及预测等过程中,缺失数据对结果产生的干扰。