博客
关于我
Pandas库函数
阅读量:795 次
发布时间:2023-02-26

本文共 4828 字,大约阅读时间需要 16 分钟。

Pandas 数据分析入门

Pandas 库是 Python 中非常强大的数据分析工具,它可以帮助开发者快速处理和分析数据。Pandas 提供了丰富的数据结构和操作方法,使得数据分析变得更加高效和直观。

Pandas 数据结构

1. import 相关库

在使用 Pandas 之前,需要先导入必要的库:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

2. Pandas Series

  • 基本创建pd.Series 是一种一维数据结构,类似于列表,但还可以指定索引。

    S1 = pd.Series(['a', 'b', 'c'])  # default index
  • 指定索引

    S1 = pd.Series(['a', 'b', 'c'], index=(1, 3, 4))
  • 字典形式指定索引

    S1 = pd.Series({1: 'a', 2: 'b', 3: 'c'})
  • 查看索引和值

    S1.index()  # 查看索引
    S1.values() # 查看数据

3. Pandas DataFrame

  • 基本创建pd.DataFrame 是一种二维数据结构,类似于电子表格。

    Df = pd.DataFrame(['a', 'b', 'c'])
  • 指定行和列索引

    Df = pd.DataFrame([[a, A], [b, B], [c, C]], columns=['小写', '大写'], index=['一', '二', '三'])
  • 列索引和行索引

    Columns 为列索引,index 为行索引。

4. 数据加载

  • 从 Excel 文件加载

    df = pd.read_excel(r'C:\user...xlsx', sheet_name='sheet1')  # 或
    df = pd.read_excel(r'C:\user...xlsx', sheet_name=0)
  • 指定列索引和行索引

    df = pd.read_excel(r'C:\user...xlsx', index_col=0, header=0)
  • 导入指定列

    df = pd.read_excel(r'C:\user...xlsx', usecols=[0, 1])  # 不能有 index_col 和 header 同时使用
  • 从文本文件加载

    df = pd.read_table(r'C:\user...txt', sep=' ')

5. 数据操作

  • 查看数据

    df.head(2)  # 查看前两行,默认查看前五行
    df.shape # 查看数据行数和列数
    df.info() # 查看数据类型和缺失值
  • 数据描述

    df.describe()  # 查看数据分布(均值、中位数、标准差等)

数据预处理

1. 处理缺失值

  • 查看缺失值

    df.info()
  • 删除缺失值的行

    df.dropna()
  • 按条件删除缺失值的行

    df.dropna(how='all')  # 删除全为空值的行
  • 填充缺失值

    df.fillna(0)  # 用 0 填充所有空值
    df.fillna({'性别': '男', '年龄': '30'}) # 适用于特定列填充

2. 处理重复值

  • 删除重复值

    df.drop_duplicates()  # 默认保留第一行
    df.drop_duplicates(subset=['性别']) # 保留第一行
    df.drop_duplicates(subset=['性别', '公司'], keep='last') # 保留最后一行

3. 数据类型转换

  • 查看列类型

    df['ID'].dtype
  • 转换数据类型

    df['ID'].astype('float')

4. 索引管理

  • 添加索引

    df.index = [1, 2, 3]
  • 重新命名索引

    df.rename(index={'订单编号': '新订单编号', '客户姓名': '新客户姓名'})
  • 列索引重命名

    df.rename(columns={1: '一', 2: '二'})
  • 重置索引

    df.reset_index()  # 将索引转为列
    df.reset_index(level=0) # 只转换某一级索引
    df.reset_index(drop=True) # 删除原有索引

数据选择

1. 选择多列

df[['ID', '姓名']]

2. 选择多行

df.iloc[[1, 3], [2, 4]]  # 行列编号选择
df.iloc[1, 1] # 选取第3行第2列

3. 条件筛选

df[df['年龄'] < 45]  # 筛选年龄小于45的数据
df[(df['年龄'] < 45) & (df['ID'] < 4)] # 多条件筛选

4. 切片操作

df.iloc[1:3, 2:4]  # 行和列切片

数据运算

1. 基本运算

df['年龄'].replace(100, 33)  # 替换特定值
df.replace(np.NaN, 0) # fillna 的另一种写法
df.replace(['A', 'B'], 'C') # 多对一替换
df.replace({'A': 'a', 'B': 'b', 'C': 'c'}) # 多对多替换

2. 排序

df.sort_values(by=['申请单编号'], ascending=False)  # 降序排序
df.sort_values(by=['申请单编号'], na_position='first') # 升序排序,缺失值在第一位
df.sort_values(by=['col1', 'col2'], ascending=[False, True]) # 多列排序

3. 统计和聚合

df['销量'].rank(method='first')  # 排序
df.drop(['销量', 'ID'], axis=1) # 删除列
df.drop(df.columns[[4, 5]], axis=1) # 删除特定列
df.drop(columns=['a', 'b']) # 删除特定列
df.drop(df.index[[4, 5]], axis=0) # 删除特定行
df.drop(index=['a', 'b']) # 删除特定行

4. 数据分析

df['ID'].value_counts()  # 统计唯一值数量
df['ID'].value_counts(normalize=True, sort=False) # 统计唯一值比例
df['ID'].unique() # 查看唯一值
df['年龄'].isin(['a', 11]) # 判断是否包含特定值

时间序列

1. 日期处理

from datetime import datetime
datetime.now() # 返回当前时间
datetime.now().year # 返回年份
datetime.now().weekday() - 1 # 返回星期几(0=星期六,6=星期日)

2. 日期格式化

datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 格式化日期
pd.DatetimeIndex(['2020-02-03', '2020-03-05']) # 设置时间索引

3. 时间差计算

cha = datetime(2018, 5, 21, 19, 50) - datetime(2018, 5, 18, 17, 50)
cha.days # 返回天数
cha.seconds # 返回秒数
cha.seconds / 3600 # 返回小时数

数据透视表

1. 分组统计

df.groupby('客户分类').count()  # 客户分类后统计数量
df.groupby('客户分类').sum() # 客户分类后统计和
df.groupby(['客户分类', '区域分类']).sum() # 多分类统计
df.groupby('客户分类').agg(['sum', 'count']) # 多种汇总方式

2. 数据透视表

pd.pivot_table(data=df, values=['ID', '销量'], index='客户分类', columns='区域', aggfunc={'ID': 'count', '销量': 'sum'}, fill_value=0, margins=True, dropna=None, margins_name='总计')

多表格拼接

1. 表格连接

pd.merge(df1, df2)  # 默认连接
pd.merge(df1, df2, on='学号') # 指定连接列
pd.merge(df1, df2, left_on='学号', right_on='编号') # 左右连接
pd.merge(df1, df2, left_index='学号', right_index='编号') # 索引连接

2. 表格拼接

pd.concat([df1, df2])  # 纵向拼接
pd.concat([df1, df2], ignore_index=True) # 重置索引
pd.concat([df1, df2], ignore_index=True).drop_duplicates() # 拼接后去重

文件导出

1. 导出 Excel

df.to_excel(r'C:\users\zhoulifu\Desktop\测试.xlsx')  # 导出文件
df.to_excel(r'C:\users\zhoulifu\Desktop\测试.xlsx', sheet_name='文档') # 指定 sheet
df.to_excel(r'C:\users\zhoulifu\Desktop\测试.xlsx', sheet_name='文档', index=False) # 去掉索引
df.to_excel(r'C:\users\zhoulifu\Desktop\测试.xlsx', sheet_name='文档', index=False, columns=['ID', '销量', '姓名']) # 指定导出列
df.to_excel(r'C:\users\zhoulifu\Desktop\测试.xlsx', sheet_name='文档', index=False, columns=['ID', '销量', '姓名'], encoding='utf-8') # 设置编码
df.to_excel(r'C:\users\zhoulifu\Desktop\测试.xlsx', sheet_name='文档', index=False, columns=['ID', '销量', '姓名'], encoding='utf-8', na_rep=0) # 填充缺失值

2. 多个表格导出

writer = pd.ExcelWriter(r'C:\users\zhoulifu\Desktop\测试.xlsx', engine='xlsxwriter')
df1.to_excel(writer, sheet_name='表一')
df2.to_excel(writer, sheet_name='表二')
writer.save()

通过以上内容,可以快速熟悉和掌握 Pandas 库的使用方法,进行数据分析和处理。

转载地址:http://gpvfk.baihongyu.com/

你可能感兴趣的文章
oracle 创建字段自增长——两种实现方式汇总
查看>>
Oracle 升级10.2.0.5.4 OPatch 报错Patch 12419392 Optional component(s) missing 解决方法
查看>>
oracle 可传输的表空间:rman
查看>>
Oracle 启动监听命令
查看>>
oracle 学习
查看>>
oracle 定义双重循环例子
查看>>
ORACLE 客户端工具连接oracle 12504
查看>>
oracle 查询clob
查看>>
oracle 行转列
查看>>
Oracle 表
查看>>
Oracle 递归
查看>>
Oracle 递归函数与拼接
查看>>
oracle 逻辑优化,提升高度,综合SQL上下文进行逻辑优化
查看>>
oracle 闪回关闭,关闭闪回即disable flashback的操作步骤
查看>>
oracle 限制用户并行,insert /*parallel */ 到不同用户,并行起不来的问题
查看>>
oracle--用户,权限,角色的管理
查看>>
Oracle-定时任务-JOB
查看>>
oracle.dataaccess 连接池,asp.net使用Oracle.DataAccess.dll连接Oracle
查看>>
oracle00205报错,Oracle控制文件损坏报错场景
查看>>
Oracle10g EM乱码之快速解决
查看>>