Pandas数据处理全流程笔记
一、数据获取(导入与读取)
Pandas支持多种格式的外部数据读取,是数据处理的起点。
1. 读取CSV文件
使用pd.read_csv()函数,传入文件路径即可加载CSV数据:
import pandas as pd
data = pd.read_csv('文件路径/data.csv') # 读取CSV文件
2. 读取Excel文件
使用pd.read_excel()函数加载Excel数据:
data = pd.read_excel('文件路径/data.xlsx') # 读取Excel文件
二、数据初步探索
获取数据后,需快速了解数据结构与内容,为后续处理奠定基础。
1. 查看数据样本
- 头部数据:
head(n)查看前n行(默认5行):
print(data.head()) # 查看前5行数据
- 尾部数据:
tail(n)查看后n行(默认5行):
print(data.tail()) # 查看后5行数据
2. 数据选择
通过索引方式提取目标数据:
- 按位置索引(
iloc):基于行/列的整数位置选择:
selected_data = data.iloc[:5, :] # 选择前5行、所有列
- 按标签/列名索引(
loc):基于列名或行标签选择:
selected_data = data.loc[:, 'ColumnName'] # 选择所有行的指定列
selected_data = data.loc[:5, 'ColumnName'] # 选择前5行的指定列
3. 数据类型查看
通过dtypes属性查看各列数据类型(如int64、object等),判断是否需要类型转换:
print(data.dtypes) # 查看各列数据类型
三、数据清洗(核心预处理)
处理数据中的“脏数据”(缺失值、异常值、重复值),保障数据质量。
1. 缺失值处理
(1)检测缺失值
用isna()或isnull()返回布尔型数据框(True表示缺失值):
missing_values = data.isna() # 或 data.isnull()
print(missing_values) # 查看缺失值位置
(2)处理策略
- 删除缺失值:
dropna()删除含缺失值的行(inplace=True直接修改原数据):
data.dropna(inplace=True) # 删除所有含缺失值的行
- 填充缺失值:
fillna()用统计量(均值、中位数等)填充:
mean_value = data.mean() # 计算每列均值
data.fillna(mean_value, inplace=True) # 用均值填充缺失值
2. 异常值处理
异常值是偏离正常分布的极端值,需通过检测-处理流程消除干扰。
(1)异常值检测
- 统计方法(Z-Score):通过“数据与均值的标准差距离”量化异常:
from scipy import stats
z_scores = stats.zscore(data['列名']) # 计算Z-Score
abs_z_scores = abs(z_scores) # 取绝对值
threshold = 2 # 设定阈值(通常为2或3)
outliers = abs_z_scores > threshold # 标记异常值(True=异常)
- 可视化方法:通过图表直观识别:
import matplotlib.pyplot as plt
# 散点图(孤立点为异常值)
plt.scatter(data['索引列'], data['目标列'], c='blue')
plt.scatter(data[outliers]['索引列'], data[outliers]['目标列'], c='red', label='异常值')
# 箱线图(箱体外部为异常值)
plt.boxplot(data['目标列'], vert=False)
plt.show()
(2)处理策略
- 删除异常值:过滤异常值行:
data_no_outliers = data[~outliers] # ~取反,保留正常数据
- 替换异常值:用统计量(均值、中位数)替换:
mean_value = data['目标列'].mean()
data['目标列'][outliers] = mean_value # 用均值替换异常值
3. 重复数据处理
重复数据会干扰分析,需检测并去重。
(1)检测重复数据
- 指定列重复:
duplicated(subset='列名')检测某列重复行:
duplicates = data.duplicated(subset='列名') # 标记指定列的重复行
print(data[duplicates]) # 查看重复行
- 整行重复:
duplicated()检测所有列完全重复的行:
duplicates = data.duplicated() # 标记整行重复
print(data[duplicates]) # 查看整行重复行
(2)处理策略
- 删除重复数据:
drop_duplicates()删除重复项:
data.drop_duplicates(inplace=True) # 直接删除所有重复行
- 保留指定重复项:通过
keep参数保留第一个/最后一个重复项:
data.drop_duplicates(keep='first', inplace=True) # 保留第一个重复项
# data.drop_duplicates(keep='last', inplace=True) # 保留最后一个重复项
四、数据整合与转换
对清洗后的数据进行整合、类型转换,满足分析需求。
1. 数据整合(多表连接)
通过merge方法连接多个数据集:
- 内连接(Inner Join):保留两表共有数据:
merged_data = pd.merge(data1, data2, on='连接列', how='inner')
- 左连接(Left Join):保留左表所有数据,右表匹配行合并:
merged_data = pd.merge(data1, data2, on='连接列', how='left')
- 右连接(Right Join):保留右表所有数据,左表匹配行合并:
merged_data = pd.merge(data1, data2, on='连接列', how='right')
- 外连接(Outer Join):保留两表所有数据,不匹配行填充
NaN:
merged_data = pd.merge(data1, data2, on='连接列', how='outer')
2. 数据类型转换
确保数据类型符合分析要求:
- 文本转数字:
pd.to_numeric()将文本列转为数值(非数字转NaN):
data['列名'] = pd.to_numeric(data['列名'], errors='coerce')
- 日期转换:
pd.to_datetime()将文本日期转为datetime类型:
data['日期列'] = pd.to_datetime(data['日期列'])
五、数据规范化与标准化
消除量纲差异,使数据具备可比性。
1. 最小-最大规范化(Min-Max)
将数据映射到[0,1]区间:
min_val = data['列名'].min()
max_val = data['列名'].max()
data['规范化列'] = (data['列名'] - min_val) / (max_val - min_val)
2. Z-Score标准化
将数据转换为“均值为0、标准差为1”的标准正态分布:
mean_val = data['列名'].mean()
std_val = data['列名'].std()
data['标准化列'] = (data['列名'] - mean_val) / std_val
六、数据保存
将处理后的数据导出为文件,便于后续分析或共享。
# 保存为CSV(不保留索引)
data.to_csv('处理后数据.csv', index=False)
# 保存为Excel(不保留索引)
data.to_excel('处理后数据.xlsx', index=False)
总结
Pandas数据处理全流程遵循“获取→探索→清洗→整合→转换→规范化→保存”的逻辑,核心是通过简洁的API(如read_csv、fillna、merge等)解决实际问题。各环节需结合业务场景灵活选择方法,最终目标是产出高质量数据,为分析与建模提供可靠输入。