Pandas教程之十九:处理 Pandas 中的缺失数据

处理 Pandas 中的缺失数据

在 Pandas 中,缺失值用None 或 NaN表示,这可能是由于未收集数据或条目不完整而发生的。让我们探索如何检测、处理和填充 DataFrame 中的缺失值,以确保准确的分析。

目录

  • 检查 Pandas DataFrame 中的缺失值
  • 填充 Pandas 中的缺失值
  • 删除 Pandas 中的缺失值

检查 Pandas DataFrame 中的缺失值

为了识别和处理缺失值,Pandas 提供了两个有用的函数:isnull()和notnull()。这些函数有助于检测某个值是否为NaN,从而更容易清理和预处理 DataFrame 或 Series 中的数据。

1. 使用 isnull() 检查缺失值

isnull()返回布尔值的 DataFrame,其中True表示缺失数据 ( NaN )。当您想要定位和处理数据集中的缺失数据时,这很有用。

示例 1:检测 DataFrame 中的缺失值

Python

# Importing pandas and numpy
import pandas as pd
import numpy as np

# Sample DataFrame with missing values
data = {'First Score': [100, 90, np.nan, 95],
        'Second Score': [30, 45, 56, np.nan],
        'Third Score': [np.nan, 40, 80, 98]}

df = pd.DataFrame(data)

# Checking for missing values using isnull()
missing_values = df.isnull()

print(missing_values)

输出:

示例 2:根据缺失值过滤数据

在本例中,isnull()函数应用于“性别”列,以筛选和显示缺少性别信息的行。

Python

import pandas as pd

data = pd.read_csv("employees.csv")
bool_series = pd.isnull(data["Gender"])
missing_gender_data = data[bool_series]
print(missing_gender_data)

输出:

使用 notnull() 检查缺失值

notnull()返回布尔值的 DataFrame,其中 True 表示非缺失数据。当您想关注包含有效、非缺失数据的行时,此函数非常有用。

示例 3:检测 DataFrame 中的非缺失值

Python

# Importing pandas and numpy
import pandas as pd
import numpy as np

# Sample DataFrame with missing values
data = {'First Score': [100, 90, np.nan, 95],
        'Second Score': [30, 45, 56, np.nan],
        'Third Score': [np.nan, 40, 80, 98]}

df = pd.DataFrame(data)

# Checking for non-missing values using notnull()
non_missing_values = df.notnull()

print(non_missing_values)

输出:

示例 4:使用非缺失值筛选数据

此代码片段使用notnull()函数筛选出“性别”列没有缺失值的行。

Python

# Importing pandas
import pandas as pd

# Reading data from a CSV file
data = pd.read_csv("employees.csv")

# Identifying non-missing values in the 'Gender' column
non_missing_gender = pd.notnull(data["Gender"])

# Filtering rows where 'Gender' is not missing
non_missing_gender_data = data[non_missing_gender]

display(non_missing_gender_data)

输出:

使用 fillna()、replace() 和 interpolate() 填充 Pandas 中的缺失值

在处理 Pandas 中的缺失数据时,通常使用fillna()replace()interpolate()函数来填充 NaN 值。这些函数允许您用特定值替换缺失值或使用插值技术。

1. 使用 fillna() 用特定值填充缺失值

fillna()函数用于用指定值替换缺失值 ( NaN )。例如,您可以用 0 填充缺失值。

示例:用零填充缺失值

Python

import pandas as pd
import numpy as np

dict = {'First Score': [100, 90, np.nan, 95],
        'Second Score': [30, 45, 56, np.nan],
        'Third Score': [np.nan, 40, 80, 98]}

df = pd.DataFrame(dict)

# Filling missing values with 0
df.fillna(0)

输出:

2. 使用 fillna 用上一个/下一个值填充缺失值

您可以使用pad方法用前一个值填充缺失值,或使用 bfill用下一个值填充。我们将使用上述数据集进行演示。

示例:使用前一个值填充(正向填充)

Python

df.fillna(method='pad')  # Forward fill

输出:

示例:用下一个值填充(向后填充)

Python

df.fillna(method='bfill')  # Backward fill

输出:

示例:使用 fillna() 将 NaN 值填充为“无性别”

Python

import pandas as pd
import numpy as np

data = pd.read_csv("employees.csv")
# Print records from 10th row to 24th row
data[10:25]

输出

现在我们将用“无性别”填充“性别”列中的所有空值

Python

# filling a null values using fillna() 
data["Gender"].fillna('No Gender', inplace = True) 
data[10:25]

输出:

3. 使用 replace() 替换缺失值

使用replace()NaN值替换为特定值,例如-99

例如:用 -99 替换 NaN

Python

import pandas as pd
import numpy as np

data = pd.read_csv("employees.csv")
data[10:25]

输出:

现在,我们将用 -99 值替换数据框中的所有 Nan 值。 

Python

data.replace(to_replace=np.nan, value=-99)

输出:

4. 使用 interpolate() 填充缺失值

interpolate()函数使用插值技术(例如线性方法)填充缺失值。

示例:线性插值

Python

# importing pandas as pd 
import pandas as pd
  
# Creating the dataframe  
df = pd.DataFrame({"A": [12, 4, 5, None, 1], 
                   "B": [None, 2, 54, 3, None], 
                   "C": [20, 16, None, 3, 8], 
                   "D": [14, 3, None, None, 6]}) 
  
# Print the dataframe 
print(df)

输出:

让我们使用线性方法插入缺失值。请注意,线性方法忽略索引并将值视为等距。 

Python

# to interpolate the missing values 
df.interpolate(method ='linear', limit_direction ='forward')

输出:

此方法通过将数据视为等间距来填充缺失值。

使用 dropna() 删除 Pandas 中的缺失值

Pandas 中的dropna ()函数删除具有NaN值的行或列。它可用于根据不同的条件删除数据。

1.删​​除至少有一个空值的行

使用dropna()删除至少包含一个缺失值的行。

示例:删除至少有一个 NaN 的行

Python

import pandas as pd
import numpy as np

dict = {'First Score': [100, 90, np.nan, 95],
        'Second Score': [30, np.nan, 45, 56],
        'Third Score': [52, 40, 80, 98],
        'Fourth Score': [np.nan, np.nan, np.nan, 65]}

df = pd.DataFrame(dict)

# Drop rows with at least one missing value
df.dropna()

输出:

2.删除所有值为空的行

您可以使用dropna(how='all')删除所有值均缺失的行。

示例:删除所有具有 NaN 值的行

Python

dict = {'First Score': [100, np.nan, np.nan, 95],
        'Second Score': [30, np.nan, 45, 56],
        'Third Score': [52, np.nan, 80, 98],
        'Fourth Score': [np.nan, np.nan, np.nan, 65]}

df = pd.DataFrame(dict)

# Drop rows where all values are missing
df.dropna(how='all')

输出:

3.删除至少有一个空值的列

要删除至少包含一个缺失值的列,请使用dropna(axis=1)。

示例:删除至少有一个 NaN 的列

Python

dict = {'First Score': [100, np.nan, np.nan, 95],
        'Second Score': [30, np.nan, 45, 56],
        'Third Score': [52, np.nan, 80, 98],
        'Fourth Score': [60, 67, 68, 65]}

df = pd.DataFrame(dict)

# Drop columns with at least one missing value
df.dropna(axis=1)

输出 :

4.删除 CSV 文件中含有缺失值的行

处理 CSV 文件中的数据时,可以使用dropna()删除缺少值的行。

示例:删除 CSV 文件中含有 NaN 的行

Python

import pandas as pd

data = pd.read_csv("employees.csv")

# Drop rows with any missing value
new_data = data.dropna(axis=0, how='any')

# Compare lengths of original and new dataframes
print("Old data frame length:", len(data))
print("New data frame length:", len(new_data))
print("Rows with at least one missing value:", (len(data) - len(new_data)))

输出 : 

Old data frame length: 1000
New data frame length: 764
Rows with at least one missing value: 236

由于差值为 236,因此有 236 行在任何一列中至少有 1 个 Null 值。

处理 Pandas 中的缺失数据 - 常见问题解答

如何获取 Pandas 中缺少数据的行?

Use isna() combined with any() to find rows with missing values:

import pandas as pd
df = pd.DataFrame({
‘A’: [1, 2, None, 4],
‘B’: [‘a’, ‘b’, ‘c’, None]
})
rows_with_missing = df[df.isna().any(axis=1)]
print(rows_with_missing)

如何处理数据集中缺失的数据?

  • 删除缺失数据:用于dropna()删除具有缺失值的行或列。
  • 填充缺失数据:使用fillna()特定值或计算统计数据(如平均值或中位数)填充缺失值。
  • 插值:对于数值数据,用来interpolate()估计缺失值。

如何使用平均值填充Pandas中的缺失值?

Fill missing numerical values with the column mean using fillna():

df[‘A’] = df[‘A’].fillna(df[‘A’].mean())

有哪些方法可以处理丢失或损坏的数据?

  • 归因:用平均值、中位数或众数替换缺失值。
  • 支持缺失数据的算法:一些 ML 算法直接处理缺失值。
  • 预测:使用模型根据其他数据预测缺失值。

如何计算Pandas中的缺失值?

Count missing values per column with isna() and sum():

missing_value_count = df.isna().sum()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潜洋

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值