问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://m.blog.csdn.net/xt14327/article/details/144243715

在数据分析和处理过程中,缺失数据是一个常见的问题。如何有效地检测、处理和填充这些缺失值,对于确保数据的完整性和分析的准确性至关重要。本文将详细介绍在Pandas中处理缺失数据的各种方法,包括检测、填充和删除缺失值。

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

检查 Pandas DataFrame 中的缺失值

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

使用 isnull() 检查缺失值

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

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

# 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()函数应用于“性别”列,以筛选和显示缺少性别信息的行。

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 中的非缺失值

# 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()函数筛选出“性别”列没有缺失值的行。

# 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 填充缺失值。

示例:用零填充缺失值

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用下一个值填充。我们将使用上述数据集进行演示。

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

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

输出:

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

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

输出:

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

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]  

输出

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

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

输出:

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

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

例如:用 -99 替换 NaN

import pandas as pd  
import numpy as np  
data = pd.read_csv("employees.csv")  
data[10:25]  

输出:

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

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

输出:

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

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

示例:线性插值

# 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)  

输出:

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

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

输出:

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

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

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

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

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

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

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 值的行

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 的列

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 的行

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()  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号