详解DataFrame.dropna()

发布时间:2023-05-19

在 pandas 中,DataFrame.dropna() 函数主要用于剔除数据集中含有缺失值的行或列,返回经过清洗处理后的新数据集。下面我们将从多个方面对此函数进行详细的阐述,包括函数的基本作用、不同参数的使用方法等。

一、df.dropna() 的作用

df.dropna() 函数用于剔除 DataFrame 中包含空值数据的行或列,以返回一份新的数据副本。该函数具有以下特点:

  1. 默认情况下,该函数会排除任何包含 NaN(即空值)的行。
  2. 此函数不会修改原始数据源,而是返回一份新的数据副本。
  3. 当所有的 NaN 值都被删除后,新的数据集的行和列的索引会自动进行重整。 在实践中,诸如广告、网络搜索等领域中的大量数据是存在缺失值(NaN)的。通过使用该函数,可以清楚目标数据集中有多少数据缺失,并且可以将缺失部分删除或进行其他处理。

二、df.dropna(inplace=True)

如果需要修改原始数据源而非返回数据副本,则可以通过指定 inplace=True 参数来实现。此时,原始数据集将被修改,得到的结果就没有返回值或返回 None。例如:

import pandas as pd
df = pd.DataFrame({'name': ['Tom', 'Jerry', 'Spike', 'Tyke'],
                   'age': [4, 3, 4, 1],
                   'gender': ['male', 'male', 'male', 'male'],
                   'fruit': ['apple', 'nan', 'orange', 'nan']})
# 在原始数据源中删除所有包含 NaN 值的行
df.dropna(inplace=True)

三、df.dropna(thresh)

df.dropna(thresh) 中,thresh 表示行或列中至少需要非 NaN 值的数量。这个参数可以控制程序删除含空值的行或列。例如,如果将 thresh 设置为3,则只删除包含至少 3 个空值的行。

import pandas as pd
df = pd.DataFrame({'name': ['Tom', 'Jerry', 'Spike', 'Tyke'],
                   'age': [4, 3, 4, 1],
                   'gender': ['male', 'male', 'male', 'male'],
                   'fruit': ['apple', 'nan', 'orange', 'nan']})
# 只保留至少含有 3 个非空数据的行
df.dropna(thresh=3, inplace=True)

四、df.dropna() 的默认参数

在使用 df.dropna() 函数时,需要注意它的默认参数。默认情况下,该函数将剔除包含任何 NaN 值的行。

import pandas as pd
df = pd.DataFrame({'name': ['Tom', 'Jerry', 'Spike', 'Tyke'],
                   'age': [4, 3, 4, 1],
                   'gender': ['male', 'male', 'male', 'male'],
                   'fruit': ['apple', 'nan', 'orange', 'nan']})
# 保留所有非空的行
df.dropna(axis=0, how='any', inplace=True)

在这里,axis=0 表示删除包含空值的行,即沿着行的方向删除;how='any' 表示只要有一个空值就要删除包含该空值的行。

五、df.dropna() 到底是删除列还是行?

在读取数据或创建 DataFrame 时,数据通常是一些行和列的列表。df.dropna() 默认情况下是在行上进行删除操作,但是可以通过提供 axis=1 参数来剔除包含任何 NaN 值的列。如下所示:

import pandas as pd
df = pd.DataFrame({'name': ['Tom', 'Jerry', 'Spike', 'Tyke'],
                   'age': [4, 3, 4, 1],
                   'gender': ['male', 'male', 'male', 'male'],
                   'fruit': ['apple', 'nan', 'orange', 'nan']})
# 删除至少有 1 个 NaN 值的列
df.dropna(axis=1, inplace=True)

六、df.dropna(how='all')

如果需要剔除所有行或列都包含 NaN 值的数据,则可以使用 how='all' 参数。如下所示:

import pandas as pd
df = pd.DataFrame({'name': ['Tom', 'Jerry', 'Spike', 'Tyke'],
                   'age': [4, 3, 4, 1],
                   'gender': ['male', 'male', 'male', 'male'],
                   'fruit': ['apple', 'nan', 'orange', 'nan']})
# 删除包含所有 NaN 值的行
df.dropna(how='all', inplace=True)

七、df.dropna(how='any')

通过使用 how='any' 参数,可以指定删除至少包含一个 NaN 值的所有行或列。

import pandas as pd
df = pd.DataFrame({'name': ['Tom', 'Jerry', 'Spike', 'Tyke'],
                   'age': [4, 3, 4, 1],
                   'gender': ['male', 'male', 'male', 'male'],
                   'fruit': ['apple', 'nan', 'orange', 'nan']})
# 删除所有值至少含有 1 个 NaN 值的行
df.dropna(how='any', inplace=True)

总结

在本文中,我们详细讨论了 df.dropna() 函数在 Pandas 中的使用方法。我们从多个角度探讨了该函数的作用、默认参数、如何使用改变默认行为以及如何删除行或列中的 NaN 值。掌握 df.dropna() 函数的使用方法可以帮助分析师更好地处理缺失数据,并使得最终的数据结果更可靠。