《Pandas 简易速速上手小册》第3章:Pandas 数据清洗基础(2024 最新版)

《Pandas 简易速速上手小册》第3章:Pandas 数据清洗基础(2024 最新版)_第1张图片

文章目录

  • 3.1 处理缺失数据
    • 3.1.1 基础知识
    • 3.1.2 重点案例:客户数据分析
    • 3.1.3 拓展案例一:医疗问卷数据处理
    • 3.1.4 拓展案例二:零售店库存清单
  • 3.2 数据类型转换
    • 3.2.1 基础知识
    • 3.2.2 重点案例:商品销售数据分析
    • 3.2.3 拓展案例一:员工信息处理
    • 3.2.4 拓展案例二:天气数据格式调整
  • 3.3 清理重复和异常数据
    • 3.3.1 基础知识
    • 3.3.2 重点案例:在线零售订单数据清洗
    • 3.3.3 拓展案例一:社交媒体用户分析
    • 3.3.4 拓展案例二:客户满意度调查数据清洗

3.1 处理缺失数据

处理缺失数据是数据分析中的一项基本技能。我们来深入了解如何在 Pandas 中识别和处理这些缺失值。

3.1.1 基础知识

  1. 识别缺失值: Pandas 使用 NaN(Not a Number)来表示缺失值。可以使用 isna()isnull() 函数来检测缺失值。
  2. 填补缺失值: 使用 fillna() 函数可以填补缺失值。可以指定一个特定的值,或者使用如平均值、中位数等统计数据。
  3. 删除缺失值: 如果数据中的缺失值太多,可以选择删除含有缺失值的行或列,使用 dropna() 函数。

3.1.2 重点案例:客户数据分析

假设你在处理一个客户数据库,这个数据库中有些客户信息不完整。

数据准备

import pandas as pd
import numpy as np

# 示例客户数据
data = {
    'name': ['Alice', 'Bob', 'Charlie', np.nan],
    'age': [25, np.nan, 30, 22],
    'city': ['New York', 'Los Angeles', np.nan, 'Chicago']
}
df = pd.DataFrame(data)

处理缺失值

# 填补缺失的年龄
df['age'].fillna(df['age'].mean(), inplace=True)

# 删除任何含有缺失值的行
df.dropna(inplace=True)

3.1.3 拓展案例一:医疗问卷数据处理

处理一份医疗问卷,其中一些问卷回答不完整。

数据准备

# 示例医疗问卷数据
med_data = {
    'patient_id': [1, 2, 3, 4],
    'survey_score': [np.nan, 8, 7, np.nan],
    'condition': ['Diabetes', np.nan, 'Heart Disease', 'Asthma']
}
med_df = pd.DataFrame(med_data)

处理缺失值

# 删除所有缺失的问卷评分
med_df.dropna(subset=['survey_score'], inplace=True)

3.1.4 拓展案例二:零售店库存清单

你需要处理一个零售店的库存清单,其中一些产品的价格未知。

数据准备

# 示例库存数据
inventory_data = {
    'product': ['Apple', 'Banana', 'Cherry', 'Date'],
    'price': [0.5, np.nan, 0.75, np.nan]
}
inventory_df = pd.DataFrame(inventory_data)

处理缺失值

# 将缺失的价格替换为该列的平均值
inventory_df['price'].fillna(inventory_df['price'].mean(), inplace=True)

通过这些案例,可以看到处理缺失数据在 Pandas 中是多么重要且容易操作。无论是客户数据分析,医疗问卷处理,还是零售库存管理,正确处理缺失值都能显著提高数据的准确性和可靠性。

《Pandas 简易速速上手小册》第3章:Pandas 数据清洗基础(2024 最新版)_第2张图片


3.2 数据类型转换

在数据分析中,确保每列数据的类型正确是至关重要的。Pandas 提供了灵活的工具来转换数据类型,从而让数据更适合分析。

3.2.1 基础知识

  1. 查看数据类型: 使用 df.dtypes 查看 DataFrame 中各列的数据类型。
  2. 转换数据类型: 使用 astype() 方法可以转换数据类型,如将字符串转换为整数或浮点数,反之亦然。
  3. 处理日期和时间: pd.to_datetime() 可以将字符串转换为日期时间格式。

3.2.2 重点案例:商品销售数据分析

假设你有一份商品销售记录,其中一些列的数据类型需要调整。

数据准备

import pandas as pd

# 示例商品销售数据
sales_data = {
    'product_id': ['001', '002', '003', '004'],
    'sales': ['30', '40', '50', '60'],
    'price': [1.5, 2.5, 3.0, 4.0]
}
sales_df = pd.DataFrame(sales_data)

数据类型转换

# 将 product_id 转换为字符串
sales_df['product_id'] = sales_df['product_id'].astype(str)

# 将 sales 转换为整型
sales_df['sales'] = sales_df['sales'].astype(int)

# 查看转换后的数据类型
print(sales_df.dtypes)

3.2.3 拓展案例一:员工信息处理

处理一份员工信息表,需要调整员工工号和入职日期的格式。

数据准备

# 示例员工信息
employee_data = {
    'employee_id': [123, 456, 789, 101],
    'start_date': ['2021-01-10', '2021-02-20', '2021-03-30', '2021-04-01']
}
employee_df = pd.DataFrame(employee_data)

数据类型转换

# 将 employee_id 转换为字符串
employee_df['employee_id'] = employee_df['employee_id'].astype(str)

# 将 start_date 转换为日期
employee_df['start_date'] = pd.to_datetime(employee_df['start_date'])

# 查看转换后的数据类型
print(employee_df.dtypes)

3.2.4 拓展案例二:天气数据格式调整

假设你有一份天气记录数据,其中温度记录为字符串,需要转换为浮点数。

数据准备

# 示例天气数据
weather_data = {
    'date': ['2021-01-01', '2021-01-02', '2021-01-03'],
    'temperature': ['32.0', '31.5', '30.0']
}
weather_df = pd.DataFrame(weather_data)

数据类型转换

# 将 temperature 转换为浮点数
weather_df['temperature'] = weather_df['temperature'].astype(float)

# 查看转换后的数据类型
print(weather_df.dtypes)

通过这些案例,你可以看到数据类型转换是如何帮助我们更好地准备和分析数据。无论是处理销售数据,员工信息,还是天气记录,正确的数据类型对于有效的数据分析至关重要。

《Pandas 简易速速上手小册》第3章:Pandas 数据清洗基础(2024 最新版)_第3张图片


3.3 清理重复和异常数据

数据清洗的重要一环是识别和处理重复及异常数据,这对于确保分析结果的准确性至关重要。

3.3.1 基础知识

  1. 识别重复数据: 使用 duplicated() 函数可以检测重复的行。
  2. 删除重复数据: drop_duplicates() 函数可以删除重复行。
  3. 识别异常数据: 异常数据通常是指那些不符合其他数据模式的数据点。可以通过各种统计方法(如 Z-score, IQR 等)识别。
  4. 处理异常数据: 处理方法包括删除、替换或转换这些异常值。

3.3.2 重点案例:在线零售订单数据清洗

假设你正在处理一份在线零售商的订单数据,其中包含重复记录和异常价格数据。

数据准备

import pandas as pd
import numpy as np

# 示例订单数据
order_data = {
    'order_id': [1, 2, 2, 3, 4, 5],
    'product': ['Widget', 'Gadget', 'Gadget', 'Thingamabob', 'Widget', 'Gadget'],
    'price': [19.99, 25.99, 25.99, 35.99, 19.99, 999.99]
}
orders_df = pd.DataFrame(order_data)

处理重复数据

# 删除重复的订单记录
orders_df.drop_duplicates(subset='order_id', keep='first', inplace=True)

处理异常数据

# 计算价格的 Z-score
orders_df['price_z'] = (orders_df['price'] - orders_df['price'].mean()) / orders_df['price'].std()

# 删除异常价格数据(Z-score > 3 或 < -3)
orders_df = orders_df[orders_df['price_z'].abs() <= 3]

3.3.3 拓展案例一:社交媒体用户分析

处理一份社交媒体用户活动数据,其中包含重复的用户记录和异常活动数据。

数据准备

# 示例社交媒体数据
social_media_data = {
    'user_id': [101, 102, 103, 101, 104, 105],
    'posts': [5, 8, 12, 5, 2, 45]
}
social_media_df = pd.DataFrame(social_media_data)

处理重复数据

# 删除重复的用户记录
social_media_df.drop_duplicates(subset='user_id', keep='first', inplace=True)

处理异常数据

# 使用 IQR 确定异常的帖子数量
Q1 = social_media_df['posts'].quantile(0.25)
Q3 = social_media_df['posts'].quantile(0.75)
IQR = Q3 - Q1
social_media_df = social_media_df[~((social_media_df['posts'] < (Q1 - 1.5 * IQR)) | (social_media_df['posts'] > (Q3 + 1.5 * IQR)))]

3.3.4 拓展案例二:客户满意度调查数据清洗

假设你有一份客户满意度调查数据,需要清除重复的调查结果和异常评分。

数据准备

# 示例客户满意度数据
survey_data = {
    'survey_id': [2001, 2002, 2003, 2002, 2004, 2005],
    'rating': [5, 3, 2, 3, 1, 10]
}
survey_df = pd.DataFrame(survey_data)

处理重复数据

# 删除重复的调查记录
survey_df.drop_duplicates(subset='survey_id', keep='first', inplace=True)

处理异常数据

# 删除评分在 1-5 之外的数据
survey_df = survey_df[survey_df['rating'].between(1, 5)]

通过这些案例,我们展示了如何在 Pandas 中有效地处理重复和异常数据。这些步骤对于保证数据集的质量和可靠性非常重要,无论是在零售、社交媒体分析还是客户满意度调查中。

你可能感兴趣的:(《Pandas,简易速速上手小册》,pandas,python,django,人工智能,数据挖掘,json,database)