最详细的Excel模块Openpyxl教程(五)-结合Numpy和Pandas

在上次的推文中,我们介绍了使用Openpyxl来进行数据的过滤和排序的操作,

相关推文可以从本公众号的底部相关菜单获取。在那篇推文中我们使用到了Pandas。因此本次推文我们就来看一看Openpyxl和Numpy、Pandas结合使用是一个什么样的效果。

一.Numpy和Pandas简介

在科学计算和数据分析领域大家对Numpy和Pandas都不会太陌生。这里简单的介绍一下。Numpy是高性能科学计算的扩展包,它能高效处理高维数组,复杂函数。而Pandas是基于NumPy 的一种常用于数据处理和分析的工具,该工具是为了解决数据分析任务而创建的,Pandas模块提供了大量快速便捷地完成数据分析和处理工作的函数和方法。

二.结合pandas

假设现在我们有一个"np_pd_test.xlsx"文件,我们制造一个Pandas的DataFrame并写入到Excel中,我们来看一下:

2.1 DataFrame写入到Excel

import pandas as pd
import numpy as np
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows

wbook = load_workbook(filename='np_pd_test.xlsx')
wsheet = wbook['Sheet1']
data = {'alpha': ['A', 'B', 'C', 'D', 'E', 'F'],
        'num_1': [25, 32, 18, np.nan, 14, 15],
        'num_2': [12, 15, 17, 18, 22, 23],
        }
labels = ['a', 'b', 'c', 'd', 'e', 'f']
df = pd.DataFrame(data, index=labels)
for each in dataframe_to_rows(df, index=False, header=True):
    wsheet.append(each)
wbook.save("np_pd_test.xlsx")

其中df的样式如下所示:


上述代码先构建了一个DataFrame,然后使用openpyxl.utils.dataframe中的dataframe_to_rows写入到Excel中,并保存。保存后的结果如下:


这仅仅是简单的将DataFrame中的数据写到Excel中,其实某一些时候我们也可以直接使用Pandas中to_excel函数进行相应的操作。

官网中说:使用这个方法会提供了代码更多的灵活性。我猜也是这样。

2.2 设置格式

另外在官网中,提供了一种cell的style的形式,只需要在最后一行加上如下代码,其他的代码不变:

for cell in wsheet['A'] + wsheet[1]:
    cell.style = 'Pandas'

那么最后的结果就会显示如下,也就是说将header和lables设置成为“Pandas形式”的数据格式。标题和索引更加的凸显。


当然在...\site-packages\openpyxl\styles\builtins.py中有一个style字典记录了可以使用的style形式,部分截图如下:

大家可以尝试使用不同的格式看看有什么不同的效果。

另外在官方文档中介绍到了一个只写模式,这里我不就不介绍了,感兴趣的小伙伴可以去研究一下官方文档,具体的这个函数的实现如下:

def WriteOnlyCell(ws=None, value=None):
    return Cell(worksheet=ws, column=1, row=1, value=value)

2.3 数据表转DataFrame

上面的操作是将数据写入到Excel的,那么怎么读取一块数据,然后将数据转换成Pandas的DataFrame呢?我们接着往下看。

学习过Pandas的小伙伴都知道将一个数据(比如说字典)转换为DataFrame的操作很简单(其中C表示字典):

Cover_data=DataFrame(C)

假设我们的源数据来自于表“np_pd_test.xlsx”的Sheet1,内容如下:

我们来执行以下代码:

import pandas as pd
from itertools import islice
from openpyxl import load_workbook
wbook = load_workbook('np_pd_test.xlsx')
wsheet = wbook['Sheet1']
data = wsheet.values
print('data:',data)

cols = next(data)[1:]
data = list(data)
idx = [r[0] for r in data]
data = (islice(r, 1, None) for r in data)
df = pd.DataFrame(data, index=idx, columns=cols)
print(cols)
print(df)
```) 

我们先看上述print函数的输出是什么,如下:
data:
('num_1', 'num_2')
num_1 num_2
A 25.0 12
B 32.0 15
C 18.0 17
D NaN 18
E 14.0 22
F 15.0 23

第一行的输出为wsheet.values,也就是说这个值一个生成器对象(有关生成器的相关知识请查阅本公众号实用教程)。

第二行的输出一个元组,其值为DataFrame中的header,这种获取header的方式是一个小技巧,大家可以好好学习一下。

第三行的输出为一个DataFrame,其值就是我们得到的DataFrame。

大家对中间过程的输出不是很明白的话,可以把各个变量都打印出来,看看是什么样的。

**三.结合numpy**

上述介绍了很多openpyxl和Pandas想结合的一些操作,由于numpy与Pandas之间可以相互的转换,这里就不在赘言了,等后期遇到相应的需求,我们再继续拿一个很好的案例来阐述。如果有伙伴发现有很好的案例可以在微信公众号后台联系我哟。

**四.总结**

以上就是本次的推文,推文介绍的是在Excel中进行排序的相关操作,大家跟着学习的时候最好也跟着实践一下。后期我们将继续介绍其他方面的知识。大家在学习的时候有什么疑问或者发现有什么好的方法可以在文章评论告诉我们哦。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容