py数据科学学习笔记day2-Pandas数据处理全流程

79 阅读5分钟

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属性查看各列数据类型(如int64object等),判断是否需要类型转换:


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_csvfillnamerge等)解决实际问题。各环节需结合业务场景灵活选择方法,最终目标是产出高质量数据,为分析与建模提供可靠输入。