Python Pandas常用功能速查
0.下载和导入
(1)下载
在terminal中,openpyxl不装容易报错
pip install pandas
pip install openpyxl
(2)导入
在python中
import pandas as pd
1.创建对象
(1)Series对象
(2)DataFrame对象
本质上是字典里头的列表
pd.DataFrame()方法也是一种强制转换
(3)我们以读取数据库为例
df = pd.read_excel(file, dtype=object) # 指定dtype可以保留各列的格式
terminal里先下载sqlalchemy
pip sqlalchemy
import sqlalchemyconn = sqlalchemy.create_engine('mysql+pymysql://Account:Password@host:port/database')
sql = " SELECT * FROM Xtable WHERE year='2021' AND month='12' LIMIT 200 "
df = pd.read_sql(sql, conn)
df = pd.DataFrame(df, columns=['学号', '姓名', '统计口径', '金额', '摘要'])
基本思路是创建一个连接和sql语句,使用pandas的read_sql函数去读取数据,返回一个DataFrame。
熟悉SQL一些的可快直接改sql语句:
sql = " SELECT 学号, 姓名, 统计口径, 金额, 摘要 FROM Xtable WHERE year='2021' AND month='12' LIMIT 200 "
df = pd.read_sql(sql, conn)
这样的思路对数据库而言压力小一些。
2.查看数据
(1)数据头尾
df.head() # 默认参数是5,也就是头5条
df.tail() # 同上
(2)查看行列
df.index # 读取的是属性,没有参数
df.columns # 同上
(3)科学计算中的格式转换
df.to_numpy() # 会转换成array
(4)统计信息
df.describe() # 会展现其计数、平均、标准差、最小值、25%、50%、75%和max值
(5)转置
df.T # 生成的是副本
(6)排序
df.sort_index(axis=1, ascending=False) # 用axis和ascending两个参数控制依据行名的横竖、升降序
在很多地方都会用到axis, axis=1遍历行,=0遍历列
df.sort_values(by='某列') # 以某列的值进行排序
3.用行列的值访问数据,因为访问的是属性,所以对其修改会直接改变df的内容
(1)取某列
df['某列'] # 用元素定位的方法,直接
df.某列 # 不带引号,这里是读取的属性,和上面等价
(2)取某行、多行
df[0] # 第零行
df[0:3] # 第零到二行
(3)组合拳:取多行多列
df.loc[:, ['某列', '某列']] # 所有行,指定列
df.loc[:, 3:5] # 所有行,第三到四列
df.loc['某较小值(如学号)':'某较大值', :] # 选定行范围,所有列
df.loc[['某值'], ['某列']] # 只有一行一列,就能确定具体单元格
4.用行列的数字位置访问数据,效果同上,不多赘述,也不推荐
df.iloc[3] # 第三列
df.iloc[3:5, 0:2] # 第三到四行,第零到二列
df.iloc[[1, 2, 4], [0, 2]] # 选取其中指定的行列
同样支持切片操作
df.iloc[1, 1] # 直接定位单元格
5.基于布尔运算的条件筛选(可用于制作表格拆分软件)
(1)布尔运算的逻辑结构
df['某列'] > 0构成一个条件;多个这样的条件之间可以用 "&"、"|"来进行连接,大于、大于等于、不等于等构成了严密的或与非逻辑
把一个或多个条件形成的语句再放到df中进行筛选
即df[一个或多个条件]
(2)还可以文本筛选
df['某列'].isin(['文本1', '文本2'])作为条件
(3)示例
df[df['金额']>500] # 单个筛选条件
df[(df['金额'] >500) & (df['金额'] <5000)] # 多个条件
6.写入数据
(1)列操作,最常用也是速度最快的
df['旧列'] = s # s可以是Series对象也可以是list,本质是一样的,这样会覆盖掉原来这列的内容
df['新列'] = s # 会直接创建一个新列
注意:长度要跟df保持一致
df['某列'] = df['某列']加减乘除df['另一列']
(2)单元格
适用上文方法,先定位到格子,再赋值即可
7.空缺值
(1)舍弃
df.dropna() # 会直接把带空缺值的那一行舍掉,哪怕那一行有一万列,9999列有值,只缺一个值
(2)填空
df.fillna('填空的值') # 会用这个值填空缺处
(3)筛选
pd.isna(df) # 会列出那些行具有空缺位,这个方法的结果可以作为一个筛选条件
8.常见统计
df['某列'].sum() # sum、count、mean、std等都可以
df['某列'].value_counts() # 频次统计
9.神奇的apply
(1)BIF: lambda
lambda x: 条件语句
Eg: lambda x: x.max() - x.min()
Eg2: lambda x: '博士' if 'D' in x else '硕士'
(2)自定义函数
def Function(x):
return x.max() - x.min()
def Function(sid):
return '博士' if 'D' in sid else '硕士'
(3)使用
def Function(sid):return '博士' if 'D' in sid else '硕士'df['层次'] = df['学号'].apply(lambda x: '博士' if 'D' in x else '硕士') # 用lambda的方式
df['层次'] = df['学号'].apply(Function) # 与上面的等价,注意不加括号
10.表格合并
(1)相同结构的表格的纵向拼接
可以直接df = df.append(df1), 但是这个方法后续要停用了
现在的方法一般是
df = pd.concat([df, df1, df2])
(2)SQL类型的JOIN拼接
与SQL的join相似,有left join, right join, inner join和outer join。
方法是
df = pd.merge(left_df, right_df, how='inner', on='sid')
11.聚合、拆解、透视
(1)聚合(groupby)是为了拆解、透视
df.groupby('某列').sum('某列') # 也是各种函数都行
df.groupby(['某列', '某列2']).sum('某列')
(2)拆解(unstack)是顺序展开
sql = " SELECT * FROM XXX WHERE year='2021' LIMIT 2000 "
df = pd.read_sql(sql, conn)
df = pd.DataFrame(df, columns=['学号', '姓名', '统计口径', '金额', '摘要'])
df.groupby(['学号', '姓名', '统计口径']).sum('金额').unstack()
(3)透视(pivot_table)也基于聚合
可以用上面的方法聚合,也可以在sql中直接先聚合
sql = " SELECT 学号, 姓名, 账务年, 账务月, 统计口径, SUM(金额) AS 金额 FROM XXX GROUP BY 学号, 姓名, 账务年, 账务月, 统计口径 LIMIT 2000"
df = pd.read_sql(sql, conn)
# 然后
pvt = pd.pivot_table(df, values='金额', index=['学号', '姓名'], columns=['账务年', '统计口径'], aggfunc='sum', margins=True)
12.绘图
先在terminal中pip install matplotlib
import matplotlib.pyplot as plt
plt.close('all')
(1)一般柱状图、折线图等
sql = " SELECT 院系名称, 金额 FROM gszz_liushui LIMIT 200 "
df = pd.read_sql(sql, conn)
df = df.groupby('院系名称').sum('金额')
df.plot(kind="bar") # 折线是line
plt.show()
(2)堆积柱状图
sql = " SELECT 学号, 统计口径, 金额 FROM XXX WHERE 学号 IN('M2020XXXXX','M2020XXXXX') "
df = pd.read_sql(sql, conn)
unstack_df = df.groupby(['学号', '统计口径']).sum('金额').unstack()
unstack_df.columns = [str(s2) for (s1, s2) in unstack_df.columns.to_list()] # 因为第一个层次是'金额', 不要。
unstack_df = unstack_df.reset_index()
unstack_df.plot.bar(x='学号', y=[col for col in unstack_df.columns if col!='学号'], stacked=True)
plt.tight_layout()
plt.show()
13.文件导出
(1)一般导出
df.to_某种格式
注意:
文件名问题:转义符(\\)转义转义符实现转义、r(reverse)
编码问题:encoding='utf_8_sig'
序号问题:根据情况看要不要保留,如果是聚合或者透视表,应该默认保留,如果是自己做的index,看是什么
(2)ExcelWriter(可以写作多个sheet)
writer = pd.ExcelWriter(file)
df.to_excel(writer, sheet_name='xx', encoding='utf_8_sig')
df2.to_excel(writer, sheet_name='yy', encoding='utf_8_sig', index=False)
writer.save() # 不保存就前功尽弃
Python Pandas常用功能速查相关推荐
- 全套Python数据分析常用命令速查表!PDF文档限时分享
当下利用python学习数据分析的热度越来越高,对于很多新手而言,大量要学习的库和工具的命令繁杂,用起来不是很顺手. 今天给大家分享一份python数据分析常用命令速查表. 一共6张表,包括:Jupy ...
- 常用Python标准库对象速查表(1)
封面图片:<Python程序设计基础(第2版)>,董付国,清华大学出版社 =============== 常用Python标准库对象速查表(1) 标准库 对象 简要说明 math sin( ...
- 极客的Linux常用命令速查手册
Linux常用命令速查手册 1.1 写在前面的话 1.2 Linux 常用命令速查手册 1.2.1 mkdir创建一个文件夹 1.2.2 cd进入一个文件夹 1.2.3 rmdir删除一个文件夹 1. ...
- python27-资源|全机器学习和Python的27个速查表(完整版)
原标题:资源|全机器学习和Python的27个速查表(完整版) 机器学习(Machine Learning) 有不少有用的流程图和机器学习算法表. 这里只包括所发现的最全面的速查表. 神经网络架构(N ...
- AutoCAD 2019 常用命令速查手册
AutoCAD 2019 常用命令速查手册 目 录 3D 命令 - 13 3DALIGN 13 3DARRAY 13 3DCONFIG 13 3DDISTANCE 14 3DDWF 14 3DFACE ...
- TensorFlow2中的常用API速查速记
这篇博客为<深度学习与TensorFlow 2入门实战>的部分笔记,为上一篇"TensorFlow2中的Tensor的常用操作速查速记"的后续,今天也正好看见龙龙老师的 ...
- Git 常用命令速查表(图文+表格)
一. Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch ...
- 【收藏】Linux系统常用命令速查手册(附赠PDF档)
给大家收集整理了日常常用的Linux系统命令,仅供大家参考. 大家如果觉得文章看起来不太方便,获取<Linux系统常用命令速查手册>.PDF版. 联系小姐姐,备注"liunx命令 ...
- 【收藏】Linux系统常用命令速查手册(附PDF下载链接)
给大家收集整理了日常常用的Linux系统命令,仅供大家参考. 大家如果觉得文章看起来不太方便,可以在+qq. 2 3 5 53 3 1 0 4 6 备注"liunx命令",即可获取 ...
最新文章
- swift3.0友盟分享
- DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测
- [资料]Keychain 获取设备唯一
- RAID原理分析总结
- 华为有国产芯片的服务器吗,华为国产电脑上市!还有一大批国产自主电脑发布:采用国产芯/系统...
- 移动端双Token免登录(附代码)
- CAD关于线型操作添加线型(com接口c#语言)
- Ask for help
- 根据字幕自动配音的软件 如何自动识别语音识别语音生成字幕
- omnet++tictoc3案例解析
- 【教育心理学】学习理论流派——行为主义学习理论
- 年轻人先实现社会价值,再去实现人生价值
- 蓝桥杯练习题(三):Python组之算法训练提高综合五十题
- 运筹学--线性目标规划
- 【Unity3D日常开发】Unity3D中实现屏幕坐标和3维空间坐标的转化
- Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Lig
- MVG读书笔记——相机模型
- C语言 统计一篇英文短文中单词的个数
- win10磁盘占用100% 解决最重要的一个步骤
- 数据库设计开源免费软件EZDML使用教程