linRichielinRichie
前端
Python
Linux
ChatGPT
  • B 站
  • 500px
前端
Python
Linux
ChatGPT
  • B 站
  • 500px
    • Python学习指南
  • 快速开始

    • Python: 输入与输出 (I/O)
    • Python: 异常处理 try-except
    • Python: List深入概述
    • Python: 面向对象编程(OOP)
  • Python 语法库函数

    • 语法库目录
    • 库

      • library目录
      • argparse:解析命令行参数
      • difflib:比较序列并生成差异信息
      • dnspython: DNS处理库
      • IPy:IP地址处理库
      • logging:记录和管理日志信息
      • os:访问和操作操作系统
      • psutil:系统性能信息库
      • re:正则表达式库
      • smtplib:邮件发送库
    • 函数

      • function目录
      • any() 函数
      • input 函数
      • lambda 和 map 函数
      • reversed()函数
      • zip()函数
    • 语句

      • statement目录
      • import 语句
      • Try/Exception 异常
    • 概念

      • concept目录
      • 深拷贝与浅拷贝
      • 列表、字典与元组
      • 文件读写
      • IO: 输入与输出
      • 逻辑判断与条件语句
      • OOP 面向对象:class
      • OOP: 面向对象编程
  • SQLAlchemy

    • 获取insert或者update的id
  • Pandas

    • Pandas目录
    • Pandas:基础操作
    • Pandas:数据处理与转换
    • Pandas: 数据写入 excel 表格
  • Python前端框架

    • Flask

      • 1. Flask简介
      • 2. Flask程序基本结构
      • 3. Flask请求-响应循环
      • 4. flask案例: 框架网页查询IP
      • Python: Flask中的GitHub OAuth
    • Django

      • chapter-01:Django框架认识

        • 1.1 Django的产生背景
        • 1.2 MTV设计模式
        • 1.3 Django 主要功能模块
      • chapter-02:开发环境配置

        • 2.1 Python的安装与配置
        • 2.2 虚拟环境安装与配置
        • 2.3 Django安装与配置
        • 2.4 MySQL安装配置
      • chapter-03:项目框架搭建

        • 3.1 Django管理工具-创建项目骨架
        • 3.2 修改项目的默认配置
        • 3.3 初始化项目环境
      • chapter-04:ORM应用与原理剖析

        • 4.1 构建POST应用需要的数据集
        • 4.2 Model相关的概念和使用方法
        • 4.3 Model的查询操作API
        • 4.4 ORM实现原理
      • chapter-05:Django管理后台

        • 5.1 将Model注册到管理后台
        • 5.2 管理后台实现原理
      • chapter-06:视图

        • 6.1 视图基础
        • 6.2 视图的高级特性和快捷方法
        • 6.3 基于类的通用视图
      • chapter-07:模板系统

        • 7.1 模板系统基础
        • 7.2 模板语言
      • chapter-08:表单系统

        • 8.2 使用表单系统实现表单: ModelForm
      • chapter-09:用户认证系统

        • 9.1 用户与身份认证
        • 9.2 权限管理
        • 9.3 用户认证系统应用
      • chapter-10:Django路由系统

        • 10.1 路由系统基础
      • chapter-11:Django中间件

        • 11.1 中间件基础
  • Python例子

    • Python: Linux的Shell命令
    • Python: PEP8自动格式化代码
    • Python: pip操作
    • Python: 业务服务监控
    • Python: 从文件逐行读取数据
    • 将链表转换为字符串
    • Python: 检查URL是否能正常访问
    • Python: 爬取网易云音乐
    • Python: 读取目录下的所有内容
    • 案例研究:文本统计
  • Python爬虫

    • 数据解析工具:Xpath
  • 算法题

    • 02:两数相加
    • 09:回文数
    • 13:罗马数值转换为整数
    • 14:最长公共前缀

Pandas:数据处理与转换

  • 1. 数据清洗
    • 1.1 处理重复数据
    • 1.2 处理异常值
  • 2. 数据转换
    • 2.1 类型转换
    • 2.2 数据规范化
  • 3. 数据重塑
    • 3.1 透视表操作
    • 3.2 数据融合
  • 4. 高级转换技巧
    • 4.1 自定义转换函数
    • 4.2 窗口计算
  • 5. 性能优化建议
  • 总结

1. 数据清洗

1.1 处理重复数据

import pandas as pd

# 检查重复行
duplicates = df.duplicated()

# 删除重复行
df_clean = df.drop_duplicates()

# 基于特定列删除重复行
df_clean = df.drop_duplicates(subset=['姓名', '年龄'])

# 保留最后一次出现的重复行
df_clean = df.drop_duplicates(keep='last')

1.2 处理异常值

# 使用统计方法识别异常值
Q1 = df['年龄'].quantile(0.25)
Q3 = df['年龄'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 过滤异常值
df_clean = df[(df['年龄'] >= lower_bound) & (df['年龄'] <= upper_bound)]

# 使用 clip 方法处理异常值
df['年龄'] = df['年龄'].clip(lower=lower_bound, upper=upper_bound)

2. 数据转换

2.1 类型转换

# 数值类型转换
df['年龄'] = pd.to_numeric(df['年龄'], errors='coerce')  # 无效值转为 NaN
df['工资'] = df['工资'].astype('float32')  # 指定精度

# 日期类型转换
df['日期'] = pd.to_datetime(df['日期'])  # 字符串转日期
df['年份'] = df['日期'].dt.year  # 提取年份
df['月份'] = df['日期'].dt.month  # 提取月份

# 类别类型转换
df['城市'] = df['城市'].astype('category')  # 转换为类别类型

2.2 数据规范化

from sklearn.preprocessing import MinMaxScaler, StandardScaler

# 最小-最大规范化 (0-1缩放)
scaler = MinMaxScaler()
df['年龄_scaled'] = scaler.fit_transform(df[['年龄']])

# 标准化 (Z-score标准化)
scaler = StandardScaler()
df['工资_scaled'] = scaler.fit_transform(df[['工资']])

3. 数据重塑

3.1 透视表操作

# 创建透视表
pivot_table = pd.pivot_table(df,
                            values='工资',
                            index=['部门'],
                            columns=['职位'],
                            aggfunc='mean')

# 长格式转宽格式
wide_df = df.pivot(index='日期',
                   columns='部门',
                   values='销售额')

3.2 数据融合

# 合并数据框
merged_df = pd.merge(df1, df2,
                     on='员工ID',  # 指定连接键
                     how='left')    # 指定连接方式

# 连接数据框
concatenated_df = pd.concat([df1, df2],
                           axis=0,     # 0表示垂直连接
                           ignore_index=True)

4. 高级转换技巧

4.1 自定义转换函数

# 使用 apply 应用自定义函数
def age_category(age):
    if age < 25:
        return '青年'
    elif age < 45:
        return '中年'
    else:
        return '老年'

df['年龄段'] = df['年龄'].apply(age_category)

# 使用 transform 进行分组转换
df['工资_标准化'] = df.groupby('部门')['工资'].transform(lambda x: (x - x.mean()) / x.std())

4.2 窗口计算

# 移动平均
df['销售额_MA7'] = df['销售额'].rolling(window=7).mean()

# 累计统计
df['累计销售额'] = df.groupby('部门')['销售额'].cumsum()

# 滑动窗口计算
df['销售额_增长率'] = df.groupby('部门')['销售额'].pct_change()

5. 性能优化建议

  1. 减少内存使用:

    • 使用适当的数据类型(如 category 类型)
    • 及时删除不需要的临时变量
  2. 提高计算效率:

    • 尽量使用向量化操作而不是循环
    • 合理使用 inplace=True 参数避免创建副本
  3. 处理大数据集:

    • 使用 chunksize 参数分块读取数据
    • 考虑使用 dask 或其他分布式计算框架

总结

  • 数据处理和转换是数据分析中最重要的步骤之一
  • Pandas 提供了丰富的工具和方法进行数据转换
  • 选择合适的转换方法可以显著提高数据处理效率
  • 注意数据类型和内存使用对性能的影响

提示:在进行数据转换时,建议先在小数据集上测试代码,确保转换逻辑正确后再应用到完整数据集。同时,重要的转换操作后要及时检查数据的完整性和准确性。

最近更新时间:
Prev
Pandas:基础操作
Next
Pandas: 数据写入 excel 表格