Python入门之使用pandas分析excel数据


Posted in Python onMay 12, 2021

1.问题

在python中,读写excel数据方法很多,比如xlrd、xlwt和openpyxl,实际上限制比较多,不是很方便。比如openpyxl也不支持csv格式。有没有更好的方法?

2.方案

更好的方法可以使用pandas,虽然pandas不是专门处理excel数据,但处理excel数据确实很方便。

本文使用excel的数据来自网络,数据内容如下:

Python入门之使用pandas分析excel数据

2.1.安装

使用pip进行安装。

pip3 install pandas

导入pandas:

import pandas as pd

下文使用pd进行pandas的操作。

2.2.读写文件

读取文件,比如excel,csv文件

# df是pandas.core.frame.DataFrame类型
df = pd.read_excel('./data/2020-suv.xlsx')

# read_csv可以指定分割符,编码方式等
df2 = pd.read_csv('./data/2020-suv.csv')

写入文件:

df.to_excel('./data/2020-suv-new.xlsx')
df.to_csv('./data/2020-suv-new.csv')

2.3.数据操作

all_cols = df.columns
print(all_cols)

# 输出,df.columns并非list类型
Index(['销量排名', '车系', '官方价', '从属品牌', '1-12月销量'], dtype='object')

# df.columns并非list类型,可以转化list
cols = list(df.columns)

获取列数据

col_data = df[u'车系']
mul_col_data = df[ [u'车系', u'1-12月销量'] ]

获取行数据

row_data = df.iloc[row_index]

获取所有行数据

all_data = df.values

切片获取多行数据

mul_row_data = df.iloc[2:4]

获取单元个数据

cell_data = df.iloc[row_index][col_index]

2.4.数据筛选

Excel数据筛选比较实用,用pandas同样可以,并且筛选代码保存后,下次可以直接使用。

某个字段包含指定值

# 包含一个值,na表示是否需要填充,case表示是否区分大小写,更强大的是contains还支持正则表达式
sub_df = df[ df[col_name].str.contains('key1', na=False, case=False) ]

# 包含多个值,多次调用即可
sub_df1 = df[ df[col_name].str.contains('key1', na=False, case=False) ]
sub_df2 = sub_df1[ sub_df1[col_name].str.contains('key2', na=False, case=False) ]

# 包含多个值(或)
sub_df = df[ df[col_name].str.contains('key1|key2|key3', na=False, case=False) ]

# 不包含,也就是非的过滤
sub_df = df[ ~df[col_name].str.contains('key1', na=False, case=False) ]

上述操作,都假设字段类型是字符串类型,不然会抛异常。可以通过以下的方法,可以判断字段是否是字符类型:

pd.api.types.is_string_dtype(df[u'车系'])

# 其他类型也有类似的函数,可以用dir查看有哪些类型判断
print(dir(pd.api.types))

# 可以通过dtypes查看字段的类型
pd.dtypes
pd[u'1-12月销量'].dtypes

条件过滤

# 大于
df[ df['1-12月销量'] > 50000 ] .values

# 相等
df[ df['1-12月销量'] == 50000 ] .values

2.5.数据写入

添加一行数据:

# 插在最后,row_datas是list
df.loc[len(df.index)] = row_datas

插入一列数据

# 在指定列前面插上一列数据
df.insert( col_index, col_name, col_datas, True)

更新某个单元值

df.iloc[row][col] = u'new-data'

2.6.数据删除

删除一列

df2 = df.drop('官方价', axis=1, inplace=False)
print(df2)

# 输出
销量排名           车系   从属品牌  1-12月销量
0       1         哈弗H6     哈弗   376864
1       2       本田CR-V     本田   249983
2       3           博越   吉利汽车   240811
3       4          途观L     大众   178574
4       5  长安CS75 PLUS   长安汽车   266824
..    ...          ...    ...      ...
282   283      北汽新能源EX  北汽新能源      879
283   284        奔腾X40     奔腾    20412
284   285    标致2008新能源     标致       37
285   286       猎豹CS10   猎豹汽车       14
286   287         森雅R7     一汽        1

[287 rows x 4 columns]

删除一行

df3 = df.drop(2, axis=0, inplace=False)
print(df3)

# 输出
     销量排名           车系           官方价   从属品牌  1-12月销量
0       1         哈弗H6   9.80-15.49万     哈弗   376864
1       2       本田CR-V  16.98-27.68万     本田   249983
3       4          途观L  21.58-28.58万     大众   178574
4       5  长安CS75 PLUS  10.69-15.49万   长安汽车   266824
5       6       本田XR-V  12.79-17.59万     本田   168272
..    ...          ...           ...    ...      ...
282   283      北汽新能源EX  18.39-20.29万  北汽新能源      879
283   284        奔腾X40          暂无报价     奔腾    20412
284   285    标致2008新能源  16.60-18.80万     标致       37
285   286       猎豹CS10   7.98-11.98万   猎豹汽车       14
286   287         森雅R7   6.69-10.69万     一汽        1

[286 rows x 5 columns]

3.讨论

pandas库用于大数据分析和AI,库本身比较复杂,很多功能未必用得上,日常使用可以简单的封装,能够读、写、搜索excel或csv数据,pandas比起专门操作excel的库要好用得多,简单封装一下即可。详细的使用说明,可以参见pandas官方文档。

https://pandas.pydata.org/docs/user_guide/index.html#user-guide

总结

到此这篇关于Python入门学习之使用pandas分析excel数据的文章就介绍到这了,更多相关Python用pandas分析excel内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python数组复制拷贝的实现方法
Jun 09 Python
Python实现图片转字符画的示例
Aug 22 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
Django 跨域请求处理的示例代码
May 02 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
python给微信好友定时推送消息的示例
Feb 20 Python
python requests指定出口ip的例子
Jul 25 Python
Python目录和文件处理总结详解
Sep 02 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 Python
将Python代码打包成.exe可执行文件的完整步骤
python3实现Dijkstra算法最短路径的实现
pytorch 中autograd.grad()函数的用法说明
python3实现无权最短路径的方法
Python入门之基础语法详解
May 11 #Python
如何利用Matlab制作一款真正的拼图小游戏
Python机器学习之逻辑回归
You might like
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php读取3389的脚本
2014/05/06 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
一个javascript参数的小问题
2008/03/02 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
Flask框架信号用法实例分析
2018/07/24 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
浅析python标准库中的glob
2020/03/13 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
几个Linux面试题笔试题
2016/08/01 面试题
三好学生先进事迹材料
2014/08/28 职场文书
党员民主评议个人总结
2014/10/20 职场文书
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python