通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

python如何统计出缺失值

python如何统计出缺失值

在Python中统计缺失值的方法主要有:使用Pandas库的isna()isnull()sum()函数、结合DataFrameSeries对象的属性和方法来进行统计、结合groupbyapply函数进行更细粒度的统计。 其中,最常用的方式是通过Pandas库,这个库提供了丰富的函数和方法,使我们能够轻松地识别和统计数据中的缺失值。详细描述其中一点,如isna()sum()函数的结合使用,可以快速统计出整个数据框中的缺失值。

isna()函数可以检测数据框中的每一个元素是否为缺失值(即NaN),返回一个与原数据框大小相同的布尔型数据框,其中缺失值的位置为True,其他位置为False。而sum()函数可以对布尔型数据框进行求和,统计出每一列中缺失值的数量。通过这两个函数的结合,我们可以快速地统计出数据框中每一列的缺失值数量。

例如:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

使用isna()和sum()统计缺失值

missing_values = df.isna().sum()

print(missing_values)

输出结果为:

A    1

B 1

C 1

dtype: int64

通过上述代码,我们可以看到每一列中缺失值的数量。

接下来将详细介绍Python中统计缺失值的各种方法和技巧。

一、使用Pandas库统计缺失值

1. 使用isna()sum()函数

Pandas库中的isna()函数可以检测数据框中的缺失值,它返回一个与原数据框大小相同的布尔型数据框,其中缺失值的位置为True,其他位置为False。然后,通过sum()函数对布尔型数据框进行求和,可以统计出每一列中的缺失值数量。

例如:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

使用isna()和sum()统计缺失值

missing_values = df.isna().sum()

print(missing_values)

输出结果为:

A    1

B 1

C 1

dtype: int64

2. 使用isnull()sum()函数

isnull()函数与isna()函数的功能相同,它们都是用于检测数据框中的缺失值。通过将isnull()函数与sum()函数结合使用,也可以统计出数据框中每一列的缺失值数量。

例如:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

使用isnull()和sum()统计缺失值

missing_values = df.isnull().sum()

print(missing_values)

输出结果为:

A    1

B 1

C 1

dtype: int64

3. 统计行中的缺失值数量

除了统计每一列中的缺失值数量外,我们还可以统计每一行中的缺失值数量。方法是使用isna()isnull()函数检测缺失值,并使用sum(axis=1)函数对行进行求和。

例如:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

统计每一行中的缺失值数量

missing_values_per_row = df.isna().sum(axis=1)

print(missing_values_per_row)

输出结果为:

0    0

1 0

2 1

3 1

dtype: int64

二、使用groupbyapply函数统计缺失值

1. 按列分组统计缺失值

我们可以使用groupby函数按某一列的值进行分组,然后使用apply函数对每个分组进行缺失值统计。这种方法适用于需要按某一分类变量进行缺失值统计的场景。

例如:

import pandas as pd

创建一个示例数据框

data = {'Category': ['A', 'A', 'B', 'B'],

'Value1': [1, 2, None, 4],

'Value2': [None, 2, 3, 4]}

df = pd.DataFrame(data)

按Category列分组,统计每个分组中缺失值的数量

missing_values_by_category = df.groupby('Category').apply(lambda x: x.isna().sum())

print(missing_values_by_category)

输出结果为:

          Value1  Value2

Category

A 0 1

B 1 0

2. 按行分组统计缺失值

我们也可以按行进行分组统计缺失值,例如按某一列的值进行分组,统计每一行中的缺失值数量。这种方法适用于需要按某一分类变量进行缺失值统计的场景。

例如:

import pandas as pd

创建一个示例数据框

data = {'Category': ['A', 'A', 'B', 'B'],

'Value1': [1, 2, None, 4],

'Value2': [None, 2, 3, 4]}

df = pd.DataFrame(data)

按Category列分组,统计每一行中的缺失值数量

missing_values_by_row = df.groupby('Category').apply(lambda x: x.isna().sum(axis=1))

print(missing_values_by_row)

输出结果为:

Category    

A 0 1

1 0

B 2 1

3 0

dtype: int64

三、使用自定义函数统计缺失值

我们可以定义一个自定义函数来统计数据框中的缺失值数量,然后将这个函数应用到数据框上。这样可以根据具体的需求进行灵活的缺失值统计。

1. 自定义函数统计列中的缺失值

例如,我们可以定义一个自定义函数来统计每一列中的缺失值数量:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

自定义函数统计每一列中的缺失值数量

def count_missing_values(column):

return column.isna().sum()

应用自定义函数统计缺失值

missing_values = df.apply(count_missing_values)

print(missing_values)

输出结果为:

A    1

B 1

C 1

dtype: int64

2. 自定义函数统计行中的缺失值

我们也可以定义一个自定义函数来统计每一行中的缺失值数量:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

自定义函数统计每一行中的缺失值数量

def count_missing_values(row):

return row.isna().sum()

应用自定义函数统计缺失值

missing_values_per_row = df.apply(count_missing_values, axis=1)

print(missing_values_per_row)

输出结果为:

0    0

1 0

2 1

3 1

dtype: int64

四、使用info()函数查看缺失值信息

Pandas库中的info()函数可以快速查看数据框的概况信息,包括每一列的数据类型、非空值数量等。通过查看非空值数量,我们可以推断出每一列中的缺失值数量。

例如:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

使用info()函数查看缺失值信息

df.info()

输出结果为:

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 4 entries, 0 to 3

Data columns (total 3 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 A 3 non-null float64

1 B 3 non-null float64

2 C 3 non-null float64

dtypes: float64(3)

memory usage: 224.0 bytes

通过上述输出结果,我们可以看到每一列的非空值数量(Non-Null Count),然后通过总行数减去非空值数量即可得到每一列中的缺失值数量。

五、使用describe()函数查看缺失值信息

Pandas库中的describe()函数可以生成数据框的描述性统计信息,包括计数(count)、均值(mean)、标准差(std)等。通过查看计数信息,我们可以推断出每一列中的缺失值数量。

例如:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

使用describe()函数查看缺失值信息

description = df.describe()

print(description)

输出结果为:

              A         B         C

count 3.000000 3.000000 3.000000

mean 2.333333 3.000000 2.000000

std 1.527525 1.000000 1.000000

min 1.000000 2.000000 1.000000

25% 1.500000 2.500000 1.500000

50% 2.000000 3.000000 2.000000

75% 3.000000 3.500000 2.500000

max 4.000000 4.000000 3.000000

通过上述输出结果,我们可以看到每一列的计数信息(count),然后通过总行数减去计数信息即可得到每一列中的缺失值数量。

六、使用missingno库可视化缺失值

missingno是一个专门用于可视化数据缺失值的Python库,通过直观的图形展示数据中的缺失值情况。

1. 安装missingno

首先,我们需要安装missingno库:

pip install missingno

2. 使用missingno库可视化缺失值

例如:

import pandas as pd

import missingno as msno

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

可视化缺失值矩阵

msno.matrix(df)

上述代码将生成一个缺失值矩阵图,通过图形展示每一列中的缺失值情况。

此外,missingno库还提供了其他几种可视化方法,例如条形图和热力图:

# 可视化缺失值条形图

msno.bar(df)

可视化缺失值热力图

msno.heatmap(df)

这些图形可以帮助我们更直观地了解数据中的缺失值情况。

七、处理缺失值的方法

在统计出数据中的缺失值后,接下来我们可能需要处理这些缺失值。处理缺失值的方法主要有以下几种:

1. 删除含有缺失值的行或列

我们可以使用dropna()函数删除含有缺失值的行或列。通过设置axis参数,可以选择删除行或列。

例如,删除含有缺失值的行:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

删除含有缺失值的行

df_cleaned = df.dropna()

print(df_cleaned)

输出结果为:

     A    B    C

1 2.0 2.0 2.0

删除含有缺失值的列:

# 删除含有缺失值的列

df_cleaned = df.dropna(axis=1)

print(df_cleaned)

输出结果为:

Empty DataFrame

Columns: []

Index: [0, 1, 2, 3]

2. 填充缺失值

我们可以使用fillna()函数填充缺失值。可以选择使用常数、均值、中位数等填充缺失值。

例如,使用常数填充缺失值:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

使用常数填充缺失值

df_filled = df.fillna(0)

print(df_filled)

输出结果为:

     A    B    C

0 1.0 0.0 1.0

1 2.0 2.0 2.0

2 0.0 3.0 3.0

3 4.0 4.0 0.0

使用均值填充缺失值:

# 使用均值填充缺失值

df_filled = df.fillna(df.mean())

print(df_filled)

输出结果为:

          A         B    C

0 1.000000 3.000000 1.0

1 2.000000 2.000000 2.0

2 2.333333 3.000000 3.0

3 4.000000 4.000000 2.0

3. 使用插值法填充缺失值

插值法是一种根据已有数据推测缺失值的方法。例如,线性插值法可以使用interpolate()函数进行缺失值填充。

例如:

import pandas as pd

创建一个示例数据框

data = {'A': [1, 2, None, 4],

'B': [None, 2, 3, 4],

'C': [1, 2, 3, None]}

df = pd.DataFrame(data)

使用线性插值法填充缺失值

df_filled = df.interpolate()

print(df_filled)

输出结果为:

     A    B    C

0 1.0 NaN 1.0

1 2.0

相关问答FAQs:

如何在Python中识别缺失值的类型?
在Python中,缺失值通常指的是数据集中缺少的条目或信息。使用pandas库可以轻松识别缺失值。通过调用isnull()isna()方法,可以返回一个布尔值DataFrame,显示每个元素是否为缺失值。接着,可以使用sum()方法来统计缺失值的总数。例如,df.isnull().sum()可以显示每一列的缺失值数量。

处理缺失值的常用方法有哪些?
在处理缺失值时,有多种常用方法可供选择。可以选择删除缺失值所在的行或列,使用dropna()方法实现;也可以选择用某个特定值(如均值、中位数或众数)填充缺失值,使用fillna()方法。此外,采用插值法也是一种常见的处理缺失值的策略,尤其是在时间序列数据中。选择合适的方法取决于数据的特性和分析目的。

在数据分析中,缺失值会对结果产生什么影响?
缺失值对数据分析的影响不容小觑。它可能导致模型训练时的偏差,影响预测的准确性。统计分析时,缺失值的存在可能会导致假设检验结果的不可靠。因此,在进行数据分析之前,识别和处理缺失值是至关重要的步骤,以确保分析结果的有效性和可信度。

相关文章