#博学谷IT技术支持#
一、pandas基本介绍
- pandas是python的一个第三方包,也是最流行的结构化数据工具集。
- pandas适用于数据量大且都是单机数据。
- 在大数据ETL数据仓库中对数据进行清洗及处理的环节使用。
二、安装pandas库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pandas
三、pandas数据结构
- DataFrame
- Series
- 索引列
- 索引名、索引值
- 索引下标、行号
- 数据列
- 列名
- 列值、具体数据
- 索引列
- Series
3.1 series对象
类似一维数组
- values:一组数据
- index:相关的数据索引标签,如果没有指定会自动创建一个0到N-1长度的整数索引
s1 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
s2 = pd.Series([i for i in range(6)], index=[i for i in 'ABCDEF'])
3.2 DataFrame对象
3.2.1 写文件
# 导包 加载数据集
import pandas as pd
# 构造df数据集
df = pd.DataFrame(
[
['1960-5-7', '刘海柱', '职业法师'],
['1978-9-1', '赵金龙', '大力哥'],
['1984-12-27', '周立齐', '窃格瓦拉'],
['1969-1-24', '于谦', '相声皇后']
],
columns=['birthday', 'name', 'AKA']
)
df
df.to_csv('./写文件.csv') # 此时应该在运行代码的相同路径下就生成了一个名为“写文件.csv”的文件
3.2.2 读文件
df = pd.read_csv('./写文件.csv')
df
3.2.3 读写数据库
pip install pymysql==1.0.2
# 如果后边的代码运行提示找不到sqlalchemy的包,和pymysql一样进行安装即可
pip install sqlalchemy==1.4.31
# 需要安装pymysql,部分版本需要额外安装sqlalchemy
# 导入sqlalchemy的数据库引擎
from sqlalchemy import create_engine
# 创建数据库引擎,传入uri规则的字符串
engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8')
# mysql+pymysql://root:chuanzhi@127.0.0.1:3306/test?charset=utf8
# mysql 表示数据库类型
# pymysql 表示python操作数据库的包
# root:chuanzhi 表示数据库的账号和密码,用冒号连接
# 127.0.0.1:3306/test 表示数据库的ip和端口,以及名叫test的数据库
# charset=utf8 规定编码格式
# df.to_sql()方法将df数据快速写入数据库
df.to_sql('test_pdtosql', engine, index=False, if_exists='append')
# 第一个参数为数据表的名称
# 第二个参数engine为数据库交互引擎
# index=False 表示不添加自增主键
# if_exists='append' 表示如果表存在就添加,表不存在就创建表并写入
四、DataFrame数据分组
4.1 基于一列或多列
- 取出每组第一条或最后一条数据
# 导包 加载数据集
import pandas as pd
df = pd.read_csv('../数据集/uniqlo.csv')
# 基于顾客性别、不同城市分组
gs2 = df.groupby(['gender_group', 'city'])
gs2
# 返回结果如下
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001B1DB24F1F0>
gs2 = df.groupby(['gender_group', 'channel'])
gs2.first() # 取出每组第一条数据
gs2.last() # 取出每组最后一条数据
4.2 分组聚合
- 按城市和线上线下划分,分别计算销售额的平均值、成本的总和
df.groupby(['列名1', '列名2']).agg({
'指定列1':'聚合函数名',
'指定列2':'聚合函数名',
'指定列3':'聚合函数名'
})
df.groupby(['city', 'channel']).agg({
'revenue':'mean',
'unit_cost':'sum'
})