1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python按照日期筛选excel_Python玩转Excel:实现函数自动填充 数据排序

python按照日期筛选excel_Python玩转Excel:实现函数自动填充 数据排序

时间:2019-04-11 07:08:54

相关推荐

python按照日期筛选excel_Python玩转Excel:实现函数自动填充 数据排序

工作中,大家经常会使用excel去处理数据以及展示,但是对于部分工作我们可以借助程序帮忙实现,达到高效解决问题的效果。

比如将接口返回的json解析并保存结果到excel中,按一定规律处理excel中的数据然后写入到新的excel文件中,汇总来自多个文件的内容到一个excel中等等。

平时在工作中遇到比较繁琐的数据需要写入到excel中,除非excel的内置公式可以处理,否则我会第一时间想到使用python处理。

在处理海(大)量数据时,用Excel处理可能不会那么方便操作,特别是列很多,一屏显示不全的话,操作起来确实不便。如果我们能够熟练掌握Python操作Excel,便可大大提高工作效率。

好用到爆的自动填充功能

下面我们模仿Excel,用Pandas实现函数自动填充功能,计算列。

读取文件,计算总价

import pandas as pd

#读取Excel文件

books = pd.read_excel("book1.xlsx",index_col="ID")

print(books)

************************

NAME1 单价 数量 总价

ID

1 Book1 10.5 10 NaN

2 Book2 11.0 10 NaN

3 Book3 11.5 10 NaN

4 Book4 12.0 10 NaN

在Excel里面,我们可以写函数,自动填充,也比较方便。

但在Python里只需要一行代码即可,虽然这看起来似乎还是没有Excel速度快,操作方便,但当数据量很大的时候,且计算比较繁琐的时候,pandas数据操作优势就凸显出来了。

1. books["总价"]=books["单价"]*books["数量"]

也可以使用下面的语句实现,显然上面方法比较简单,但下面方法很适合于从某一段开始计算。

2. for i in books.index: books["总价"].at[i]=books["单价"].at[i]*books["数量"].at[i]

运行结果:

NAME1 单价 数量 总价

ID

1 Book1 10.5 10 105.0

2 Book2 11.0 10 110.0

3 Book3 11.5 10 115.0

4 Book4 12.0 10 120.0

下面,我们给每本书涨2块钱

第一种方法:

books["单价"]= books["单价"]+2

第二种方法:使用lambda表达式

books["单价"]=books["单价"].apply(lambda x:x+2)

NAME1 单价 数量 总价

ID

1 Book1 12.5 10 105.0

2 Book2 13.0 10 110.0

3 Book3 13.5 10 115.0

4 Book4 14.0 10 120.0

只要你乐意,怎么排都行

数据排序,函数sort_values用法:

DataFrame.sort_values(by="##",axis=0,ascending=True, inplace=False, na_position="last")

参数说明:

参数 说明

by 指定列名(axis=0或"index")或索引值(axis=1或"columns")

axis 若axis=0或"index",则按照指定列中数据大小排序;若axis=1或"columns",则按照指定索引中数据大小排序,默认axis=0

ascending 是否按指定列的数组升序排列,默认为True,即升序排列

inplace 是否用排序后的数据集替换原来的数据,默认为False,即不替换

na_position {"first","last"}, 设定缺失值的显示位置

下面我们对价格降序排列

import pandas as pdproducts = pd.read_excel("book2.xlsx",index_col="ID")

products.sort_values(by="价格",inplace=True,ascending=False)

print(products)

划重点:如果需要对满足两个条件的排序,by=[list]列表即可,是不是也很简单

products.sort_values(by=["是否值得购买","价格"],inplace=True,ascending= [True,False])

运行结果:

ID 商品 价格 是否值得购买

10 product10 201 no

5 product5 65 no

7 product7 45 no

9 product9 199 yes

8 product8 156 yes

3 product3 123 yes

4 product4 111 yes

1 product1 100 yes

2 product2 88 yes

6 product6 76 yes

绘图前准备工作,数据筛选和过滤(loc函数)

apply函数是pandas里面所有函数中自由度最高的函数。

该函数如下:

DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds) 该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针。

这个函数需要自己实现,函数的传入参数根据axis来定,比如axis = 1,就会把一行数据作为Series的数据 结构传入给自己实现的函数中,我们在函数中实现对Series不同属性之间的计算,返回一个结果,则apply函数会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。

目标:读取学生信息表,筛选出符合年龄段(18岁到20岁)和成绩段(85分到100分)的学生。

import pandas as pd

def age18_20(age):

#18<=age<=20 Python特有写法

return 18<=age<=20

def level_s(score):

return 85<=score<=100

stu = pd.read_excel("students.xlsx",index_col="ID")

stu=stu.loc[stu["年龄"].apply(age18_20)].loc[stu["成绩"].apply(level_s)]

print(stu)

运行结果:

姓名 年龄 成绩

ID

5 李2 18 88

8 王3 19 86

大家可以优化上面代码,使用 lambda表达式,尽量不使用函数,显得代码简洁、高效和高大上。

高大上的数据可视化

import pandas as pd

import matplotlib.pyplot as plt

#读取数据

stu = pd.read_excel("students.xlsx",index_col="ID")

#排序

stu.sort_values(by="成绩",inplace=True)

#生成柱状图

stu.plot.bar(x="姓名",y="成绩",color="orange",title="学生成绩表")

#或 plt.bar(stu["姓名"],stu["成绩"],color="orange")

#紧促显示

plt.tight_layout()

#显示图片

plt.show()

在学习Python的道路上肯定会遇见困难,别慌,我这里有一套学习资料,包含40+本电子书,800+个教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等,不怕你学不会!

https://shimo.im/docs/JWCghr8prjCVCxxK/ 《Python学习资料》

关注公众号【Python圈子】,优质文章每日送达。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。