Python之Excel表格数据处理
正式开讲之前,我们需要先了解几个基本的知识点:
1、Python字典(Dictionary) 的setdefault()方法
描述:如果键不存在于字典中,将会添加键并将值设为默认值。
语法:dict.setdefault(key, default=None)
参数:
key -- 查找的键值。
default -- 键不存在时,设置的默认键值。
返回值:如果字典中包含有给定键,则返回该键对应的值,否则返回为该键设置的值。
实例:
picnicItems = {'cup': 10, 'apple': 5}
picnicItems.setdefault('cup', 3)
print(picnicItems)
picnicItems.setdefault('sausage', 3)
print(picnicItems)
执行结果:
{'cup': 10, 'apple': 5}
{'cup': 10, 'apple': 5, 'sausage': 3}
2、Python用pprint.pformat()函数保存变量
作用:pprint.pformat()函数将列表或字典中的内容转换为文本字符串后返回。这个字符串易于阅读,且符合Python代码语法。假如你有一个字典,保存在一个变量中,你希望保存这个变量和它的内容,以便将来使用。pprint.pformat()函数将提供一个字符串,你可以将它写入.py文件。该文件将成为你自己的模块,如果你需要使用存储在.py文件的变量,就可以先导入它。
示例:详见下方内容。
准备工作
本文主要讲述Python读取Excel表格后的数据处理方法。那么我们需要一个示例的Excel文件,下载地址和提取码如下:
下载链接:https://pan.baidu.com/s/1Qcj3CzSB2i6hcQkdRAVhww
提取码:74gr
说明:请自行下载后,将文件放在Python脚本文件的同级目录下(主要是为了方便操作,避免不必要的错误)
Python读取Excel数据之后的数据处理
完成任务:统计美国每个郡县下面有多少个区和人口,并将统计结果写入一个文件中。
存储数据结构:{'AL': {'Autauga':{'tract': '01001020100', 'pop': 1912}}, 'AL': {'Autauga':{'tract': '01001020200', 'pop': 2736}},...}
示例源码:
# 1.打开工作簿
wb = openpyxl.load_workbook(r"D:\zxt\censuspopdata.xlsx")
# 2.从表单中读取数据
ws = wb.active
# 定义一个空字典,用于存储数据
countyData = {}
# 按行读取数据
for row in range(2, ws.max_row+1):
# 读取每行州、郡县、人口的值
state = ws['B' + str(row)].value
county = ws['C' + str(row)].value
pop = ws['D' + str(row)].value
# 判断countyData中是否存在state和county, 如果不存在给一个默认值
countyData.setdefault(state, {})
countyData[state].setdefault(county, {'tract': 0, 'pop': 0})
# 对不同郡县内的区和人口的数量进行累加
countyData[state][county]['tract'] += 1
countyData[state][county]['pop'] += int(pop) # Excel中读取出来的数字是str类型,需要转换下
# 新建一个文件
print("Write results...")
resultFile = open('census2010.py', 'w') # 以写的形式打开一个文件
# 将字典countyData转换成字符串,存储在变量allData中,写入resultFile文件
resultFile.write('allData =' + pprint.pformat(countyData))
# 关闭文件
resultFile.close()
经过处理后生成的文件,数据格式如下:
allData ={'AK': {'Aleutians East': {'pop': 3141, 'tract': 1},
'Aleutians West': {'pop': 5561, 'tract': 2},
'Anchorage': {'pop': 291826, 'tract': 55},
'Bethel': {'pop': 17013, 'tract': 3},
'Bristol Bay': {'pop': 997, 'tract': 1},
'Denali': {'pop': 1826, 'tract': 1},
'Dillingham': {'pop': 4847, 'tract': 2},
'Fairbanks North Star': {'pop': 97581, 'tract': 19},
'Haines': {'pop': 2508, 'tract': 1},
'Hoonah-Angoon': {'pop': 2150, 'tract': 2},
'Juneau': {'pop': 31275, 'tract': 6},
'Kenai Peninsula': {'pop': 55400, 'tract': 13},
'Ketchikan Gateway': {'pop': 13477, 'tract': 4},
'Kodiak Island': {'pop': 13592, 'tract': 5},
'Lake and Peninsula': {'pop': 1631, 'tract': 1},
'Matanuska-Susitna': {'pop': 88995, 'tract': 24},
'Nome': {'pop': 9492, 'tract': 2},
'North Slope': {'pop': 9430, 'tract': 3},
'Northwest Arctic': {'pop': 7523, 'tract': 2},
'Petersburg': {'pop': 3815, 'tract': 1},
'Prince of Wales-Hyder': {'pop': 5559, 'tract': 4},
'Sitka': {'pop': 8881, 'tract': 2},
'Skagway': {'pop': 968, 'tract': 1},
'Southeast Fairbanks': {'pop': 7029, 'tract': 2},
'Valdez-Cordova': {'pop': 9636, 'tract': 3},
'Wade Hampton': {'pop': 7459, 'tract': 1},
'Wrangell': {'pop': 2369, 'tract': 1},
'Yakutat': {'pop': 662, 'tract': 1},
'Yukon-Koyukuk': {'pop': 5588, 'tract': 4}},
'AL': {'Autauga': {'pop': 54571, 'tract': 12},
'Baldwin': {'pop': 182265, 'tract': 31},
'Barbour': {'pop': 27457, 'tract': 9},
'Bibb': {'pop': 22915, 'tract': 4},
'Blount': {'pop': 57322, 'tract': 9},
'Bullock': {'pop': 10914, 'tract': 3},
'Butler': {'pop': 20947, 'tract': 9},
'Calhoun': {'pop': 118572, 'tract': 31},
'Chambers': {'pop': 34215, 'tract': 9},
'Cherokee': {'pop': 25989, 'tract': 6},
'Chilton': {'pop': 43643, 'tract': 9},
'Choctaw': {'pop': 13859, 'tract': 4},
'Clarke': {'pop': 25833, 'tract': 9},
'Clay': {'pop': 13932, 'tract': 4},
'Cleburne': {'pop': 14972, 'tract': 4},
'Coffee': {'pop': 49948, 'tract': 14},
'Colbert': {'pop': 54428, 'tract': 14},
'Conecuh': {'pop': 13228, 'tract': 5},
'Coosa': {'pop': 11539, 'tract': 3},
'Covington': {'pop': 37765, 'tract': 14},
'Crenshaw': {'pop': 13906, 'tract': 6},
'Cullman': {'pop': 80406, 'tract': 18},
'Dale': {'pop': 50251, 'tract': 14},
'Dallas': {'pop': 43820, 'tract': 15},
'DeKalb': {'pop': 71109, 'tract': 14},
'Elmore': {'pop': 79303, 'tract': 15},
'Escambia': {'pop': 38319, 'tract': 9},
'Etowah': {'pop': 104430, 'tract': 30},
'Fayette': {'pop': 17241, 'tract': 5},
'Franklin': {'pop': 31704, 'tract': 9},
'Geneva': {'pop': 26790, 'tract': 6},
'Greene': {'pop': 9045, 'tract': 3},
'Hale': {'pop': 15760, 'tract': 6},
'Henry': {'pop': 17302, 'tract': 6},
'Houston': {'pop': 101547, 'tract': 22},
'Jackson': {'pop': 53227, 'tract': 11},
'Jefferson': {'pop': 658466, 'tract': 163},
'Lamar': {'pop': 14564, 'tract': 3},
'Lauderdale': {'pop': 92709, 'tract': 22},
'Lawrence': {'pop': 34339, 'tract': 9},
'Lee': {'pop': 140247, 'tract': 27},
'Limestone': {'pop': 82782, 'tract': 16},
'Lowndes': {'pop': 11299, 'tract': 4},
'Macon': {'pop': 21452, 'tract': 12},
'Madison': {'pop': 334811, 'tract': 73},
'Marengo': {'pop': 21027, 'tract': 6},
'Marion': {'pop': 30776, 'tract': 8},
'Marshall': {'pop': 93019, 'tract': 18},
'Mobile': {'pop': 412992, 'tract': 114},
'Monroe': {'pop': 23068, 'tract': 7},
'Montgomery': {'pop': 229363, 'tract': 65},
'Morgan': {'pop': 119490, 'tract': 27},
'Perry': {'pop': 10591, 'tract': 3},
'Pickens': {'pop': 19746, 'tract': 5},
'Pike': {'pop': 32899, 'tract': 8},
'Randolph': {'pop': 22913, 'tract': 6},
'Russell': {'pop': 52947, 'tract': 13},
'Shelby': {'pop': 195085, 'tract': 48},
'St. Clair': {'pop': 83593, 'tract': 13},
'Sumter': {'pop': 13763, 'tract': 4},
'Talladega': {'pop': 82291, 'tract': 22},
'Tallapoosa': {'pop': 41616, 'tract': 10},
'Tuscaloosa': {'pop': 194656, 'tract': 47},
'Walker': {'pop': 67023, 'tract': 18},
'Washington': {'pop': 17581, 'tract': 5},
'Wilcox': {'pop': 11670, 'tract': 4},
'Winston': {'pop': 24484, 'tract': 7}},
...
}
使用处理后的数据
创建一个use_census2010.py文件,写入如下代码,打印其中一个区的人口数量:
import census2010
pop = census2010.allData['AK']['Aleutians East']['pop']
print(pop)
执行结果:3141
最后,觉得对你有用的朋友麻烦点赞、推荐,顶一下,后续精彩内容持续更新中!
Python之Excel表格数据处理的更多相关文章
- Python读写Excel表格
最近在做一些数据处理和计算的工作,因为数据是以.CSV格式保存的,因此刚开始直接用Excel来处理. 但是做着做着发现重复的劳动,其实并没有多大的意义,于是就想着写个小工具帮着处理. 以前正好在一本书 ...
- python 处理 Excel 表格
see: http://www.cnblogs.com/sunada2005/p/3193300.html 一.可使用的第三方库 python中处理excel表格,常用的库有xlrd(读excel)表 ...
- python 对Excel表格的写入
python对Excel表格写入需要导入xlrd ,和xlutils两个库 from xlrd import open_workbook from xlutils.copy import copy o ...
- Python 利用Python操作excel表格之openyxl介绍Part2
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart() ...
- Python 利用Python操作excel表格之openyxl介绍Part1
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...
- 【转】python操作excel表格(xlrd/xlwt)
[转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...
- Python 利用Python操作excel表格之xlwt介绍
利用Python操作excel表格之xlwt介绍 by:授客 QQ:1033553122 直接上代码 案例1 #!/usr/bin/env python # -*- coding:utf-8 ...
- 通过Python将Excel表格信息导入数据库
前言 公司原采用Excel表格方式记录着服务器资产信息,随着业务的增加,相应的硬件资产也增加,同时物理机虚拟化出多台虚拟机,存在表格管理杂乱.变更资产信息不能及时相互同步, 为了紧跟时代的步伐,老大搞 ...
- python - 操作excel表格
说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...
- 使用Python处理Excel表格的简单方法
使用Python处理Excel表格的简单方法 这篇文章主要介绍了使用Python处理Excel表格的简单方法,本文给大家介绍的非常详细,需要的朋友可以参考下 Excel 中的每一个单元,都会有这些属性 ...
随机推荐
- BEST 定理与矩阵树定理的证明
BEST 定理:计算有向图的欧拉回路数量 欧拉图 \(G\) 的欧拉回路个数为 \(T_s(G)\prod(out_i-1)!\),其中 \(T_s(G)\) 代表以 \(s\) 为根的内向树个数,\ ...
- mongodb图片上传 初识vue
1.回顾 1.1 node node 服务器 url querystring express express 项目生成器 ejs 1.2 mongodb mongod --dbpath d:\data ...
- DevOps|研发效能价值如何衡量
现在很多公司都在做或者计划做研发效能,也知道研发效能工作很重要,能提高产研运同学的协同效率,提高员工的工作效率和质量,提高业务交付效率和交付质量,但是价值有多大?效率又有多高呢?因为不容易说清楚,所以 ...
- ACM-NEFUOJ-P210畅通工程并查集
题目:我已经明示到这个程度了你还不用并查集? #include<bits/stdc++.h> using namespace std; const int MAXN=1010; int F ...
- cephadm 安装部署 ceph 集群
介绍 手册: https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/5/html/architecture_guide/ ...
- Zookeeper的深入分析
运⾏时状态分析 在ZAB协议的设计中,每个进程都有可能处于如下三种状态之⼀ · LOOKING:Leader选举阶段. · FOLLOWING:Follower服务器和Leader服务器保持同步状态. ...
- [Python]【Form Data vs Request Payload】之 python 爬虫如何实现 POST request payload 形式的请求
1 问题描述 欲使用Python的requests库(requests.session().request(...))实现对此Ajax的POST请求进行模拟实现. 但在chrome发现其请求的形式不一 ...
- windows安装telnet命令
1.打开控制面板 2.点击程序和功能 3.点击打开或关闭windows功能 4.等候一分钟左右 5.勾选telnet选项 6.测试telnet 7.如果通的话,弹出telnet窗口,按住"C ...
- PHP利用 JSON 将XML转换为数组
在很多开发项目中,我们都会遇到将XML文件转换为数组使用,因此在本篇 PHP教程 中,UncleToo和大家一起学习 如何转换XML为数组 . 现在有一个uncletoo.xml的配置文件,格式如下: ...
- 动态规划DP入门问题----最大连续子序列,最长不下降子序列(可以不连续),最长公共子序列
一.最大连续子序列 1.题目叙述 对于一个数字序列A1A2A3...An,求出连续子序列的最大和,如对于序列-2,11,-4,13,-5,-2,其中的最大序列和是11+(-4)+13=20 2.动态规 ...