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常用功能速查相关推荐

  1. 全套Python数据分析常用命令速查表!PDF文档限时分享

    当下利用python学习数据分析的热度越来越高,对于很多新手而言,大量要学习的库和工具的命令繁杂,用起来不是很顺手. 今天给大家分享一份python数据分析常用命令速查表. 一共6张表,包括:Jupy ...

  2. 常用Python标准库对象速查表(1)

    封面图片:<Python程序设计基础(第2版)>,董付国,清华大学出版社 =============== 常用Python标准库对象速查表(1) 标准库 对象 简要说明 math sin( ...

  3. 极客的Linux常用命令速查手册

    Linux常用命令速查手册 1.1 写在前面的话 1.2 Linux 常用命令速查手册 1.2.1 mkdir创建一个文件夹 1.2.2 cd进入一个文件夹 1.2.3 rmdir删除一个文件夹 1. ...

  4. python27-资源|全机器学习和Python的27个速查表(完整版)

    原标题:资源|全机器学习和Python的27个速查表(完整版) 机器学习(Machine Learning) 有不少有用的流程图和机器学习算法表. 这里只包括所发现的最全面的速查表. 神经网络架构(N ...

  5. AutoCAD 2019 常用命令速查手册

    AutoCAD 2019 常用命令速查手册 目 录 3D 命令 - 13 3DALIGN 13 3DARRAY 13 3DCONFIG 13 3DDISTANCE 14 3DDWF 14 3DFACE ...

  6. TensorFlow2中的常用API速查速记

    这篇博客为<深度学习与TensorFlow 2入门实战>的部分笔记,为上一篇"TensorFlow2中的Tensor的常用操作速查速记"的后续,今天也正好看见龙龙老师的 ...

  7. Git 常用命令速查表(图文+表格)

    一. Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态  git commit 提交  git branch -a 查看所有的分支 git branch ...

  8. 【收藏】Linux系统常用命令速查手册(附赠PDF档)

    给大家收集整理了日常常用的Linux系统命令,仅供大家参考. 大家如果觉得文章看起来不太方便,获取<Linux系统常用命令速查手册>.PDF版. 联系小姐姐,备注"liunx命令 ...

  9. 【收藏】Linux系统常用命令速查手册(附PDF下载链接)

    给大家收集整理了日常常用的Linux系统命令,仅供大家参考. 大家如果觉得文章看起来不太方便,可以在+qq. 2 3 5 53 3 1 0 4 6 备注"liunx命令",即可获取 ...

最新文章

  1. swift3.0友盟分享
  2. DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测
  3. [资料]Keychain 获取设备唯一
  4. RAID原理分析总结
  5. 华为有国产芯片的服务器吗,华为国产电脑上市!还有一大批国产自主电脑发布:采用国产芯/系统...
  6. 移动端双Token免登录(附代码)
  7. CAD关于线型操作添加线型(com接口c#语言)
  8. Ask for help
  9. 根据字幕自动配音的软件 如何自动识别语音识别语音生成字幕
  10. omnet++tictoc3案例解析
  11. 【教育心理学】学习理论流派——行为主义学习理论
  12. 年轻人先实现社会价值,再去实现人生价值
  13. 蓝桥杯练习题(三):Python组之算法训练提高综合五十题
  14. 运筹学--线性目标规划
  15. 【Unity3D日常开发】Unity3D中实现屏幕坐标和3维空间坐标的转化
  16. Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Lig
  17. MVG读书笔记——相机模型
  18. C语言 统计一篇英文短文中单词的个数
  19. win10磁盘占用100% 解决最重要的一个步骤
  20. 数据库设计开源免费软件EZDML使用教程

热门文章

  1. 自己研发的Android3D引擎开发的3d壁纸,欢迎大家拍砖~~
  2. C++可变参数模板的展开方式
  3. 开源项目共同体分析框架概述
  4. 疫情过后,正确的生活打开方式
  5. 使用 html-withimg-loader 处理 HTML 中的图片
  6. 12306铁路订票系统的一个小bug
  7. tomcat修改默认端口详细步骤(包含运行测试)
  8. 2021大厂Java面试真题(二)
  9. vue中报错 fns.apply is not a function
  10. Vue.js实例学习:获取DOM元素