文章目录
- 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 基础知识
- 识别缺失值: Pandas 使用
NaN
(Not a Number)来表示缺失值。可以使用isna()
或isnull()
函数来检测缺失值。 - 填补缺失值: 使用
fillna()
函数可以填补缺失值。可以指定一个特定的值,或者使用如平均值、中位数等统计数据。 - 删除缺失值: 如果数据中的缺失值太多,可以选择删除含有缺失值的行或列,使用
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 中是多么重要且容易操作。无论是客户数据分析,医疗问卷处理,还是零售库存管理,正确处理缺失值都能显著提高数据的准确性和可靠性。
3.2 数据类型转换
在数据分析中,确保每列数据的类型正确是至关重要的。Pandas 提供了灵活的工具来转换数据类型,从而让数据更适合分析。
3.2.1 基础知识
- 查看数据类型: 使用
df.dtypes
查看 DataFrame 中各列的数据类型。 - 转换数据类型: 使用
astype()
方法可以转换数据类型,如将字符串转换为整数或浮点数,反之亦然。 - 处理日期和时间:
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)
通过这些案例,你可以看到数据类型转换是如何帮助我们更好地准备和分析数据。无论是处理销售数据,员工信息,还是天气记录,正确的数据类型对于有效的数据分析至关重要。
3.3 清理重复和异常数据
数据清洗的重要一环是识别和处理重复及异常数据,这对于确保分析结果的准确性至关重要。
3.3.1 基础知识
- 识别重复数据: 使用
duplicated()
函数可以检测重复的行。 - 删除重复数据:
drop_duplicates()
函数可以删除重复行。 - 识别异常数据: 异常数据通常是指那些不符合其他数据模式的数据点。可以通过各种统计方法(如 Z-score, IQR 等)识别。
- 处理异常数据: 处理方法包括删除、替换或转换这些异常值。
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 中有效地处理重复和异常数据。这些步骤对于保证数据集的质量和可靠性非常重要,无论是在零售、社交媒体分析还是客户满意度调查中。