Windows下Python使用Pandas模块操作Excel文件的教程


Posted in Python onMay 31, 2016

安装Python环境
ANACONDA是一个Python的发行版本,包含了400多个Python最常用的库,其中就包括了数据分析中需要经常使用到的Numpy和Pandas等。更重要的是,不论在哪个平台上,都可以一键安装,自动配置好环境,不需要用户任何的额外操作,非常方便。因此,安装Python环境就只需要到ANACONDA网站上下载安装文件,双击安装即可。
ANACONDA官方下载地址:https://www.continuum.io/downloads
安装完成之后,使用windows + r键打开Windows命令行,输入ipython,然后回车:

Python 2.7.11 |Anaconda 2.5.0 (64-bit)| (default, Jan 29 2016, 14:26:21) [MSC v.1500 64 bit (AMD64)]

Type "copyright", "credits" or "license" for more information.

IPython 4.0.3 -- An enhanced Interactive Python.

?     -> Introduction and overview of IPython's features.

%quickref -> Quick reference.

help   -> Python's own help system.

object?  -> Details about 'object', use 'object??' for extra details.

如上所示,如果成功进入了Python环境,则代表安装成功。

使用pandas处理excel
在本文我以log.xls文件为例,来说明如何使用pandas处理excel文件。log.xls文件的内容如下所示:

Windows下Python使用Pandas模块操作Excel文件的教程

可以看到log.xls中包含了多个的表(sheet),每个表主要包括了member和activity两个属性,相同的member ID的数据相邻的排列在一起,并且最后一行是前面所有的汇总。这里,我们假设需要提取出每个member汇总的信息,即提取每个member连续出现的最后一行的数据。如何实现呢?

这里我们就来隆重介绍Pandas,,从https://pypi.python.org/pypi/pandas/0.16.2官方下载,cmd命令行进入下载解压目录,

python setup.py install

安装。

(PS:python的大数据模块pandas完全安装完毕后还依赖于
• NumPy: 1.6.1 or higher
• python-dateutil 1.5
• pytz
这三个模块也许要安装。
可选择依赖有(可以根据需要安装)
• SciPy: miscellaneous statistical functions
• PyTables: necessary for HDF5-based storage
• SQLAlchemy: for SQL database support. Version 0.8.1 or higher recommended.
• matplotlib: for plotting
• statsmodels
? Needed for parts of pandas.stats
• openpyxl, xlrd/xlwt
? openpyxl version 1.6.1 or higher, but lower than 2.0.0
? Needed for Excel I/O
• XlsxWriter
? Alternative Excel writer.
• boto: necessary for Amazon S3 access.

导入pandas模块:

import pandas as pd

使用import读入pandas模块,并且为了方便使用其缩写pd指代。

读入待处理的excel文件:

df = pd.read_excel('log.xls')

通过使用read_excel函数读入excel文件,后面需要替换成excel文件所在的路径。读入之后变为pandas的DataFrame对象。DataFrame是一个面向列(column-oriented)的二维表结构,且含有列表和行标,对excel文件的操作就转换为对DataFrame操作。另外,如果一个excel含有多个表,如果你只想读入其中一个可以:

df = pd.read_excel('log.xls', sheetname=1)

增加了一个参数sheetname,表示的是第几个表,从0开始计数。我上面设置的是1,也就是第二个表。

读入之后,可以先查看表头信息和每一列的数据类型:

df.dtypes
输出如下:
Member     object
Unnamed: 1  float64
Unnamed: 2  float64
Unnamed: 3  float64
Unnamed: 4  float64
Unnamed: 5  float64
家内外活动类型    object
Unnamed: 7   object
activity    object
dtype: object

提取每个member连续出现的最后一行数据:

new_df = df.drop_duplicates(subset='Member', keep='last')

以上语句的意思是根据Member字段去除掉多余的行,并且保留相同行的最后一行数据。这些就得到了每一个member最后一行的数据了,返回了经过筛选后的DataFrame。

接下来需要将处理后的结果,保存为excel文件:

out = pd.ExcelWriter('output.xls')
new_df.to_excel(out)
out.save()

output.xls是你要保存的文件名,可以任取;然后将DataFrame的内容保存到该文件,最后保存该文件到系统的磁盘上。

接下来,你就可以在当前目录看到一个新的文件,可以直接使用excel打开查看。

Pandas还提供了很多的API,可以根据具体的任务,查找API文档,找到合适的函数来完成任务。

附:一个完整的示例

#coding=utf-8
import pandas as pd

# 读入excel文件中的第2个表
df = pd.read_excel('log.xls', sheetname=1)
# 查看表的数据类型
print df.dtypes
# 查看Member列的数据
print df['Member']

'''
# 新建一列,每一行的值是Member列和activity列相同行值的和
for i in df.index:
  df['activity_2'][i] = df['Member'][i] + df['activity'][i]
'''

# 根据Member字段去除掉多余的行,并且保留相同行的最后一行数据
new_df = df.drop_duplicates(subset='Member', keep='last')
# 导出结果
out = pd.ExcelWriter('output.xls')
new_df.to_excel(out)
out.save()
Python 相关文章推荐
python去除所有html标签的方法
May 05 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
Django日志模块logging的配置详解
Feb 14 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
Python爬虫学习之获取指定网页源码
Jul 30 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
Python中filter与lambda的结合使用详解
Dec 24 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
如何基于windows实现python定时爬虫
May 01 Python
深入理解python中的浅拷贝和深拷贝
May 30 #Python
浅谈Python的文件类型
May 30 #Python
python中string模块各属性以及函数的用法介绍
May 30 #Python
Python 常用string函数详解
May 30 #Python
整理Python 常用string函数(收藏)
May 30 #Python
深入浅析python继承问题
May 29 #Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 #Python
You might like
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
int在python中的含义以及用法
2019/06/27 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
机关门卫制度
2014/02/01 职场文书
就业协议书的作用
2014/04/11 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
护士年终个人总结
2015/02/13 职场文书
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL