上一篇:挑战全网目前最全python例子(附源码),独此一家,经典值得收藏!!!(四):Python利器

七、Python画图

Python常用的绘图工具包括:matplotlib, seaborn, plotly等,以及一些其他专用于绘制某类图如词云图等的包,描绘绘图轨迹的turtle包等。本章节将会使用一些例子由易到难的阐述绘图的经典小例子,目前共收录10个。

1 turtle绘制奥运五环图

turtle绘图的函数非常好用,基本看到函数名字,就能知道它的含义,下面使用turtle,仅用15行代码来绘制奥运五环图。

1 导入库

import turtle
复制代码免费领取Python自动化学习资料  工具,面试宝典面试技巧,加QQ群,785128166,群内还会大佬技术交流

2 定义画圆函数

def drawCircle(x,y,c='red'):p.pu()# 抬起画笔p.goto(x,y) # 绘制圆的起始位置p.pd()# 放下画笔p.color(c)# 绘制c色圆环p.circle(30,360) #绘制圆:半径,角度
复制代码免费领取Python自动化学习资料  工具,面试宝典面试技巧,加QQ群,785128166,群内还会大佬技术交流

3 画笔基本设置

p = turtle
p.pensize(3) # 画笔尺寸设置3
复制代码免费领取Python自动化学习资料  工具,面试宝典面试技巧,加QQ群,785128166,群内还会大佬技术交流

4 绘制五环图

调用画圆函数

drawCircle(0,0,'blue')
drawCircle(60,0,'black')
drawCircle(120,0,'red')
drawCircle(90,-30,'green')
drawCircle(30,-30,'yellow')    p.done()
复制代码

结果:

[图片上传失败...(image-7c479f-1577689175382)]

2 turtle绘制漫天雪花

导入模块

导入 turtle库和 python的 random

import turtle as p
import random
复制代码

绘制雪花

def snow(snow_count):p.hideturtle()p.speed(500)p.pensize(2)for i in range(snow_count):r = random.random()g = random.random()b = random.random()p.pencolor(r, g, b)p.pu()p.goto(random.randint(-350, 350), random.randint(1, 270))p.pd()dens = random.randint(8, 12)snowsize = random.randint(10, 14)for _ in range(dens):p.forward(snowsize)  # 向当前画笔方向移动snowsize像素长度p.backward(snowsize)  # 向当前画笔相反方向移动snowsize像素长度p.right(360 / dens)  # 顺时针移动360 / dens度复制代码

绘制地面

def ground(ground_line_count):p.hideturtle()p.speed(500)for i in range(ground_line_count):p.pensize(random.randint(5, 10))x = random.randint(-400, 350)y = random.randint(-280, -1)r = -y / 280g = -y / 280b = -y / 280p.pencolor(r, g, b)p.penup()  # 抬起画笔p.goto(x, y)  # 让画笔移动到此位置p.pendown()  # 放下画笔p.forward(random.randint(40, 100))  # 眼当前画笔方向向前移动40~100距离
复制代码

主函数

def main():p.setup(800, 600, 0, 0)# p.tracer(False)p.bgcolor("black")snow(30)ground(30)# p.tracer(True)p.mainloop()main()
复制代码

动态图结果展示:

图片失效了~抱歉

3 wordcloud词云图

import hashlib
import pandas as pd
from wordcloud import WordCloud
geo_data=pd.read_excel(r"../data/geo_data.xlsx")
print(geo_data)
# 0     深圳
# 1     深圳
# 2     深圳
# 3     深圳
# 4     深圳
# 5     深圳
# 6     深圳
# 7     广州
# 8     广州
# 9     广州words = ','.join(x for x in geo_data['city'] if x != []) #筛选出非空列表值
wc = WordCloud(background_color="green", #背景颜色"green"绿色max_words=100, #显示最大词数font_path='./fonts/simhei.ttf', #显示中文min_font_size=5,max_font_size=100,width=500  #图幅宽度)
x = wc.generate(words)
x.to_file('../data/geo_data.png')
复制代码

[图片上传失败...(image-78330d-1577689175382)]

4 plotly画柱状图和折线图

#柱状图+折线图
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Scatter(x=[0, 1, 2, 3, 4, 5],y=[1.5, 1, 1.3, 0.7, 0.8, 0.9]))
fig.add_trace(go.Bar(x=[0, 1, 2, 3, 4, 5],y=[2, 0.5, 0.7, -1.2, 0.3, 0.4]))
fig.show()
复制代码

图片上传失败~

5 seaborn热力图(免费领取Python自动化学习资料  工具,面试宝典面试技巧,加QQ群,785128166,群内还会大佬技术交流)

# 导入库
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 生成数据集
data = np.random.random((6,6))
np.fill_diagonal(data,np.ones(6))
features = ["prop1","prop2","prop3","prop4","prop5", "prop6"]
data = pd.DataFrame(data, index = features, columns=features)
print(data)
# 绘制热力图
heatmap_plot = sns.heatmap(data, center=0, cmap='gist_rainbow')
plt.show()
复制代码

6 matplotlib折线图

模块名称:example_utils.py,里面包括三个函数,各自功能如下:

import matplotlib.pyplot as plt# 创建画图fig和axes
def setup_axes():fig, axes = plt.subplots(ncols=3, figsize=(6.5,3))for ax in fig.axes:ax.set(xticks=[], yticks=[])fig.subplots_adjust(wspace=0, left=0, right=0.93)return fig, axes
# 图片标题
def title(fig, text, y=0.9):fig.suptitle(text, size=14, y=y, weight='semibold', x=0.98, ha='right',bbox=dict(boxstyle='round', fc='floralwhite', ec='#8B7E66',lw=2))
# 为数据添加文本注释
def label(ax, text, y=0):ax.annotate(text, xy=(0.5, 0.00), xycoords='axes fraction', ha='center',style='italic',bbox=dict(boxstyle='round', facecolor='floralwhite',ec='#8B7E66'))
复制代码

import numpy as np
import matplotlib.pyplot as pltimport example_utilsx = np.linspace(0, 10, 100)fig, axes = example_utils.setup_axes()
for ax in axes:ax.margins(y=0.10)# 子图1 默认plot多条线,颜色系统分配
for i in range(1, 6):axes[0].plot(x, i * x)# 子图2 展示线的不同linestyle
for i, ls in enumerate(['-', '--', ':', '-.']):axes[1].plot(x, np.cos(x) + i, linestyle=ls)# 子图3 展示线的不同linestyle和marker
for i, (ls, mk) in enumerate(zip(['', '-', ':'], ['o', '^', 's'])):axes[2].plot(x, np.cos(x) + i * x, linestyle=ls, marker=mk, markevery=10)# 设置标题
# example_utils.title(fig, '"ax.plot(x, y, ...)": Lines and/or markers', y=0.95)
# 保存图片
fig.savefig('plot_example.png', facecolor='none')
# 展示图片
plt.show()
复制代码

7 matplotlib散点图

对应代码:

"""
散点图的基本用法
"""
import numpy as np
import matplotlib.pyplot as pltimport example_utils# 随机生成数据
np.random.seed(1874)
x, y, z = np.random.normal(0, 1, (3, 100))
t = np.arctan2(y, x)
size = 50 * np.cos(2 * t)**2 + 10fig, axes = example_utils.setup_axes()# 子图1
axes[0].scatter(x, y, marker='o',  color='darkblue', facecolor='white', s=80)
example_utils.label(axes[0], 'scatter(x, y)')# 子图2
axes[1].scatter(x, y, marker='s', color='darkblue', s=size)
example_utils.label(axes[1], 'scatter(x, y, s)')# 子图3
axes[2].scatter(x, y, s=size, c=z,  cmap='gist_ncar')
example_utils.label(axes[2], 'scatter(x, y, s, c)')# example_utils.title(fig, '"ax.scatter(...)": Colored/scaled markers',
#                     y=0.95)
fig.savefig('scatter_example.png', facecolor='none')plt.show()

8 matplotlib柱状图

对应代码:

import numpy as np
import matplotlib.pyplot as pltimport example_utilsdef main():fig, axes = example_utils.setup_axes()basic_bar(axes[0])tornado(axes[1])general(axes[2])# example_utils.title(fig, '"ax.bar(...)": Plot rectangles')fig.savefig('bar_example.png', facecolor='none')plt.show()# 子图1
def basic_bar(ax):y = [1, 3, 4, 5.5, 3, 2]err = [0.2, 1, 2.5, 1, 1, 0.5]x = np.arange(len(y))ax.bar(x, y, yerr=err, color='lightblue', ecolor='black')ax.margins(0.05)ax.set_ylim(bottom=0)example_utils.label(ax, 'bar(x, y, yerr=e)')# 子图2
def tornado(ax):y = np.arange(8)x1 = y + np.random.random(8) + 1x2 = y + 3 * np.random.random(8) + 1ax.barh(y, x1, color='lightblue')ax.barh(y, -x2, color='salmon')ax.margins(0.15)example_utils.label(ax, 'barh(x, y)')# 子图3
def general(ax):num = 10left = np.random.randint(0, 10, num)bottom = np.random.randint(0, 10, num)width = np.random.random(num) + 0.5height = np.random.random(num) + 0.5ax.bar(left, height, width, bottom, color='salmon')ax.margins(0.15)example_utils.label(ax, 'bar(l, h, w, b)')main()
复制代码

9 matplotlib等高线图

对应代码:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cbook import get_sample_dataimport example_utilsz = np.load(get_sample_data('bivariate_normal.npy'))fig, axes = example_utils.setup_axes()axes[0].contour(z, cmap='gist_earth')
example_utils.label(axes[0], 'contour')axes[1].contourf(z, cmap='gist_earth')
example_utils.label(axes[1], 'contourf')axes[2].contourf(z, cmap='gist_earth')
cont = axes[2].contour(z, colors='black')
axes[2].clabel(cont, fontsize=6)
example_utils.label(axes[2], 'contourf + contour\n + clabel')# example_utils.title(fig, '"contour, contourf, clabel": Contour/label 2D data',
#                     y=0.96)
fig.savefig('contour_example.png', facecolor='none')plt.show()
复制代码

10 imshow图

对应代码:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cbook import get_sample_data
from mpl_toolkits import axes_grid1import example_utilsdef main():fig, axes = setup_axes()plot(axes, *load_data())# example_utils.title(fig, '"ax.imshow(data, ...)": Colormapped or RGB arrays')fig.savefig('imshow_example.png', facecolor='none')plt.show()def plot(axes, img_data, scalar_data, ny):# 默认线性插值axes[0].imshow(scalar_data, cmap='gist_earth', extent=[0, ny, ny, 0])# 最近邻插值axes[1].imshow(scalar_data, cmap='gist_earth', interpolation='nearest',extent=[0, ny, ny, 0])# 展示RGB/RGBA数据axes[2].imshow(img_data)def load_data():img_data = plt.imread(get_sample_data('5.png'))ny, nx, nbands = img_data.shapescalar_data = np.load(get_sample_data('bivariate_normal.npy'))return img_data, scalar_data, nydef setup_axes():fig = plt.figure(figsize=(6, 3))axes = axes_grid1.ImageGrid(fig, [0, 0, .93, 1], (1, 3), axes_pad=0)for ax in axes:ax.set(xticks=[], yticks=[])return fig, axesmain()

11 pyecharts绘制仪表盘

使用pip install pyecharts 安装,版本为 v1.6,pyecharts绘制仪表盘,只需要几行代码:

from pyecharts import charts# 仪表盘
gauge = charts.Gauge()
gauge.add('Python小例子', [('Python机器学习', 30), ('Python基础', 70.),('Python正则', 90)])
gauge.render(path="./data/仪表盘.html")
print('ok')
复制代码

仪表盘中共展示三项,每项的比例为30%,70%,90%,如下图默认名称显示第一项:Python机器学习,完成比例为30%

12 pyecharts漏斗图

from pyecharts import options as opts
from pyecharts.charts import Funnel, Page
from random import randintdef funnel_base() -> Funnel:c = (Funnel().add("豪车", [list(z) for z in zip(['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉'],[randint(1, 20) for _ in range(7)])]).set_global_opts(title_opts=opts.TitleOpts(title="豪车漏斗图")))return c
funnel_base().render('./img/car_fnnel.html')
复制代码

以7种车型及某个属性值绘制的漏斗图,属性值大越靠近漏斗的大端。

13 pyecharts日历图

import datetime
import random
from pyecharts import options as opts
from pyecharts.charts import Calendardef calendar_interval_1() -> Calendar:begin = datetime.date(2019, 1, 1)end = datetime.date(2019, 12, 27)data = [[str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]for i in range(0, (end - begin).days + 1, 2)  # 隔天统计]calendar = (Calendar(init_opts=opts.InitOpts(width="1200px")).add("", data, calendar_opts=opts.CalendarOpts(range_="2019")).set_global_opts(title_opts=opts.TitleOpts(title="Calendar-2019年步数统计"),visualmap_opts=opts.VisualMapOpts(max_=25000,min_=1000,orient="horizontal",is_piecewise=True,pos_top="230px",pos_left="100px",),))return calendarcalendar_interval_1().render('./img/calendar.html')
复制代码

绘制2019年1月1日到12月27日的步行数,官方给出的图形宽度900px不够,只能显示到9月份,本例使用opts.InitOpts(width="1200px")做出微调,并且visualmap显示所有步数,每隔一天显示一次:

14 pyecharts绘制graph图

import json
import os
from pyecharts import options as opts
from pyecharts.charts import Graph, Pagedef graph_base() -> Graph:nodes = [{"name": "cus1", "symbolSize": 10},{"name": "cus2", "symbolSize": 30},{"name": "cus3", "symbolSize": 20}]links = []for i in nodes:if i.get('name') == 'cus1':continuefor j in nodes:if j.get('name') == 'cus1':continuelinks.append({"source": i.get("name"), "target": j.get("name")})c = (Graph().add("", nodes, links, repulsion=8000).set_global_opts(title_opts=opts.TitleOpts(title="customer-influence")))return c
复制代码

构建图,其中客户点1与其他两个客户都没有关系(link),也就是不存在有效边:

15 pyecharts水球图

from pyecharts import options as opts
from pyecharts.charts import Liquid, Page
from pyecharts.globals import SymbolTypedef liquid() -> Liquid:c = (Liquid().add("lq", [0.67, 0.30, 0.15]).set_global_opts(title_opts=opts.TitleOpts(title="Liquid")))return cliquid().render('./img/liquid.html')
复制代码

水球图的取值[0.67, 0.30, 0.15]表示下图中的三个波浪线,一般代表三个百分比:

16 pyecharts饼图

from pyecharts import options as opts
from pyecharts.charts import Pie
from random import randintdef pie_base() -> Pie:c = (Pie().add("", [list(z) for z in zip(['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉'],[randint(1, 20) for _ in range(7)])]).set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))return cpie_base().render('./img/pie_pyecharts.html')
复制代码

17 pyecharts极坐标图

import random
from pyecharts import options as opts
from pyecharts.charts import Page, Polardef polar_scatter0() -> Polar:data = [(alpha, random.randint(1, 100)) for alpha in range(101)] # r = random.randint(1, 100)print(data)c = (Polar().add("", data, type_="bar", label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="Polar")))return cpolar_scatter0().render('./img/polar.html')
复制代码

极坐标表示为(夹角,半径),如(6,94)表示夹角为6,半径94的点:

18 pyecharts词云图

from pyecharts import options as opts
from pyecharts.charts import Page, WordCloud
from pyecharts.globals import SymbolTypewords = [("Python", 100),("C++", 80),("Java", 95),("R", 50),("JavaScript", 79),("C", 65)
]def wordcloud() -> WordCloud:c = (WordCloud()# word_size_range: 单词字体大小范围.add("", words, word_size_range=[20, 100], shape='cardioid').set_global_opts(title_opts=opts.TitleOpts(title="WordCloud")))return cwordcloud().render('./img/wordcloud.html')
复制代码

("C",65)表示在本次统计中C语言出现65次

19 pyecharts系列柱状图

from pyecharts import options as opts
from pyecharts.charts import Bar
from random import randintdef bar_series() -> Bar:c = (Bar().add_xaxis(['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉']).add_yaxis("销量", [randint(1, 20) for _ in range(7)]).add_yaxis("产量", [randint(1, 20) for _ in range(7)]).set_global_opts(title_opts=opts.TitleOpts(title="Bar的主标题", subtitle="Bar的副标题")))return cbar_series().render('./img/bar_series.html')
复制代码

20 pyecharts热力图

import random
from pyecharts import options as opts
from pyecharts.charts import HeatMapdef heatmap_car() -> HeatMap:x = ['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉']y = ['中国','日本','南非','澳大利亚','阿根廷','阿尔及利亚','法国','意大利','加拿大']value = [[i, j, random.randint(0, 100)]for i in range(len(x)) for j in range(len(y))]c = (HeatMap().add_xaxis(x).add_yaxis("销量", y, value).set_global_opts(title_opts=opts.TitleOpts(title="HeatMap"),visualmap_opts=opts.VisualMapOpts(),))return cheatmap_car().render('./img/heatmap_pyecharts.html')
复制代码

热力图描述的实际是三维关系,x轴表示车型,y轴表示国家,每个色块的颜色值代表销量,颜色刻度尺显示在左下角,颜色越红表示销量越大。

八、Python实战           (免费领取Python自动化学习资料  工具,面试宝典面试技巧,加QQ群,785128166,群内还会大佬技术交流)

1 环境搭建

区分几个小白容易混淆的概念:pycharm,python解释器,conda安装,pip安装,总结来说:

  • pycharm是python开发的集成开发环境(Integrated Development Environment,简称IDE),它本身无法执行Python代码
  • python解释器才是真正执行代码的工具,pycharm里可设置Python解释器,一般去python官网下载python3.7或python3.8版本;如果安装过anaconda,它里面必然也包括一个某版本的Python解释器;pycharm配置python解释器选择哪一个都可以。
  • anaconda是python常用包的合集,并提供给我们使用conda命令非常方便的安装各种Python包。
  • conda安装:我们安装过anaconda软件后,就能够使用conda命令下载anaconda源里(比如中科大镜像源)的包
  • pip安装:类似于conda安装的python安装包的方法

修改镜像源

在使用安装conda 安装某些包会出现慢或安装失败问题,最有效方法是修改镜像源为国内镜像源。之前都选用清华镜像源,但是2019年后已停止服务。推荐选用中科大镜像源。

先查看已经安装过的镜像源,cmd窗口执行命令:

conda config --show
复制代码

查看配置项channels,如果显示带有tsinghua,则说明已安装过清华镜像。

channels:
- https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/cpu/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
复制代码

下一步,使用conda config --remove channels url地址删除清华镜像,如下命令删除第一个。然后,依次删除所有镜像源

conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/cpu/
复制代码

添加目前可用的中科大镜像源:

conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
复制代码

并设置搜索时显示通道地址:

conda config --set show_channel_urls yes
复制代码

确认是否安装镜像源成功,执行conda config --show,找到channels值为如下:

channels:- https://mirrors.ustc.edu.cn/anaconda/pkgs/free/- defaults
复制代码

Done~

2 自动群发邮件

Python自动群发邮件

import smtplib
from email import (header)
from email.mime import (text, application, multipart)
import timedef sender_mail():smt_p = smtplib.SMTP()smt_p.connect(host='smtp.qq.com', port=25)sender, password = '113097485@qq.com', "**************"smt_p.login(sender, password)receiver_addresses, count_num = ['guozhennianhua@163.com', 'xiaoxiazi99@163.com'], 1for email_address in receiver_addresses:try:msg = multipart.MIMEMultipart()msg['From'] = "zhenguo"msg['To'] = email_addressmsg['subject'] = header.Header('这是邮件主题通知', 'utf-8')msg.attach(text.MIMEText('这是一封测试邮件,请勿回复本邮件~', 'plain', 'utf-8'))smt_p.sendmail(sender, email_address, msg.as_string())time.sleep(10)print('第%d次发送给%s' % (count_num, email_address))count_num = count_num + 1except Exception as e:print('第%d次给%s发送邮件异常' % (count_num, email_address))continuesmt_p.quit()sender_mail()
复制代码

注意: 发送邮箱是qq邮箱,所以要在qq邮箱中设置开启SMTP服务,设置完成时会生成一个授权码,将这个授权码赋值给文中的password变量。

发送后的截图:

3 二分搜索

二分搜索是程序员必备的算法,无论什么场合,都要非常熟练地写出来。

小例子描述: 在有序数组arr中,指定区间[left,right]范围内,查找元素x 如果不存在,返回-1

二分搜索binarySearch实现的主逻辑

def binarySearch(arr, left, right, x):while left <= right:mid = int(left + (right - left) / 2); # 找到中间位置。求中点写成(left+right)/2更容易溢出,所以不建议这样写# 检查x是否出现在位置midif arr[mid] == x:print('found %d 在索引位置%d 处' %(x,mid))return mid# 假如x更大,则不可能出现在左半部分elif arr[mid] < x:left = mid + 1 #搜索区间变为[mid+1,right]print('区间缩小为[%d,%d]' %(mid+1,right))# 同理,假如x更小,则不可能出现在右半部分elif x<arr[mid]:right = mid - 1 #搜索区间变为[left,mid-1]print('区间缩小为[%d,%d]' %(left,mid-1))# 假如搜索到这里,表明x未出现在[left,right]中return -1
复制代码

Ipython交互界面中,调用binarySearch的小Demo:

In [8]: binarySearch([4,5,6,7,10,20,100],0,6,5)
区间缩小为[0,2]
found 5 at 1
Out[8]: 1In [9]: binarySearch([4,5,6,7,10,20,100],0,6,4)
区间缩小为[0,2]
区间缩小为[0,0]
found 4 at 0
Out[9]: 0In [10]: binarySearch([4,5,6,7,10,20,100],0,6,20)
区间缩小为[4,6]
found 20 at 5
Out[10]: 5In [11]: binarySearch([4,5,6,7,10,20,100],0,6,100)
区间缩小为[4,6]
区间缩小为[6,6]
found 100 at 6
Out[11]: 6
复制代码

4 爬取天气数据并解析温度值

爬取天气数据并解析温度值

素材来自朋友袁绍,感谢!

爬取的html 结构

import requests
from lxml import etree
import pandas as pd
import reurl = 'http://www.weather.com.cn/weather1d/101010100.shtml#input'
with requests.get(url) as res:content = res.contenthtml = etree.HTML(content)
复制代码

通过lxml模块提取值

lxml比beautifulsoup解析在某些场合更高效

location = html.xpath('//*[@id="around"]//a[@target="_blank"]/span/text()')
temperature = html.xpath('//*[@id="around"]/div/ul/li/a/i/text()')
复制代码

结果:

['香河', '涿州', '唐山', '沧州', '天津', '廊坊', '太原', '石家庄', '涿鹿', '张家口', '保定', '三河', '北京孔庙', '北京国子监', '中国地质博物馆', '月坛公
园', '明城墙遗址公园', '北京市规划展览馆', '什刹海', '南锣鼓巷', '天坛公园', '北海公园', '景山公园', '北京海洋馆']['11/-5°C', '14/-5°C', '12/-6°C', '12/-5°C', '11/-1°C', '11/-5°C', '8/-7°C', '13/-2°C', '8/-6°C', '5/-9°C', '14/-6°C', '11/-4°C', '13/-3°C'
, '13/-3°C', '12/-3°C', '12/-3°C', '13/-3°C', '12/-2°C', '12/-3°C', '13/-3°C', '12/-2°C', '12/-2°C', '12/-2°C', '12/-3°C']
复制代码

构造DataFrame对象

df = pd.DataFrame({'location':location, 'temperature':temperature})
print('温度列')
print(df['temperature'])
复制代码

正则解析温度值

df['high'] = df['temperature'].apply(lambda x: int(re.match('(-?[0-9]*?)/-?[0-9]*?°C', x).group(1) ) )
df['low'] = df['temperature'].apply(lambda x: int(re.match('-?[0-9]*?/(-?[0-9]*?)°C', x).group(1) ) )
print(df)
复制代码

详细说明子字符创捕获

除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(group)。比如:^(\d{3})-(\d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码

m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
print(m.group(0))
print(m.group(1))
print(m.group(2))# 010-12345
# 010
# 12345
复制代码

如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来。

注意到group(0)永远是原始字符串,group(1)group(2)……表示第1、2、……个子串。

最终结果

Name: temperature, dtype: objectlocation temperature  high  low
0         香河     11/-5°C    11   -5
1         涿州     14/-5°C    14   -5
2         唐山     12/-6°C    12   -6
3         沧州     12/-5°C    12   -5
4         天津     11/-1°C    11   -1
5         廊坊     11/-5°C    11   -5
6         太原      8/-7°C     8   -7
7        石家庄     13/-2°C    13   -2
8         涿鹿      8/-6°C     8   -6
9        张家口      5/-9°C     5   -9
10        保定     14/-6°C    14   -6
11        三河     11/-4°C    11   -4
12      北京孔庙     13/-3°C    13   -3
13     北京国子监     13/-3°C    13   -3
14   中国地质博物馆     12/-3°C    12   -3
15      月坛公园     12/-3°C    12   -3
16   明城墙遗址公园     13/-3°C    13   -3
17  北京市规划展览馆     12/-2°C    12   -2
18       什刹海     12/-3°C    12   -3
19      南锣鼓巷     13/-3°C    13   -3
20      天坛公园     12/-2°C    12   -2
21      北海公园     12/-2°C    12   -2
22      景山公园     12/-2°C    12   -2
23     北京海洋馆     12/-3°C    12   -3
复制代码

挑战全网目前最全python例子(附源码),独此一家,经典值得收藏!!!(五):Python绘图,Python实战相关推荐

  1. 前端小白也能快速学会的博客园博客美化全攻略[附源码]

    前端小白也能快速学会的博客园博客美化全攻略[附源码] 文章目录 前端小白也能快速学会的博客园博客美化全攻略[附源码] 美化方法论简介 准备工作 js权限申请 如何模仿一个博客园的自定义风格(样式css ...

  2. 用css使用html设置背景图片自适应,CSS怎么设置背景图片自适应全屏?附源码!...

    不少同学在设置网站背景图片时会遇到这么一个问题:背景图片总是不能铺满整个屏幕,不是图片太小就是图片被过度放大,显得不太美观.那么 CSS 怎么设置背景图片自适应全屏呢?这篇文章告诉你. 实现效果: 源 ...

  3. 径向基神经网络(RBFNN)的实现(Python,附源码及数据集)

    文章目录 一.理论基础 1.径向基神经网络结构 2.前向传播过程 3.反向传播过程 4.建模步骤 二.径向基神经网络的实现 1.训练过程(RBFNN.py) 2.测试过程(test.py) 3.测试结 ...

  4. 爬虫实战—拿下最全租房数据 | 附源码

    「关注我,和我一起放下灵魂,让灵魂去搬砖.」 作者:小一 介绍:放不下灵魂的搬砖者 全文共6329字,阅读全文需17分钟 点赞再看,养成好习惯 Python版本3.8.0,开发工具:Pycharm 写 ...

  5. Python数据分析实战-提取DataFrame(Excel)某列(字段)最全操作(附源码和实现效果)

    实现功能: Python数据分析实战-提取DataFrame(Excel)某列(字段)最全操作,代码演示了单列提取和多列提取两种情况,其中单列提取有返回series格式和dataframe两种情况,在 ...

  6. 《权力的游戏》最终季上线!谁是你最喜爱的演员?这里有一份Python教程 | 附源码...

    译者 | 刘畅 编辑 | 琥珀 出品 | AI科技大本营(id:rgznai100) <权力的游戏>最终季已于近日开播,对于全世界翘首以待的粉丝们来说,其最大的魅力就在于"无法预 ...

  7. 三阶魔方的演示-用Python实现-附源码

    三阶魔方的演示-用Python实现 相信很多人都玩过魔方,最常见的就是三阶魔方.初级的玩家在玩的时候不可避免的遇到一个问题就是玩着玩着,还原不了了.如果那教程来照着还原,一步一步下来也很费劲.我开发这 ...

  8. 反向传播神经网络(BPNN)的实现(Python,附源码及数据集)

    文章目录 一.理论基础 1.前向传播 2.反向传播 3.激活函数 4.神经网络结构 二.BP神经网络的实现 1.训练过程(BPNN.py) 2.测试过程(test.py) 3.测试结果 4.参考源码及 ...

  9. LSTM神经网络实现对股市收盘价格的预测实战(python实现 附源码 超详细)

    源码或数据集请点赞关注收藏后评论区留言或者私信博主要 由于独特的设计结构 LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件. LSTM是一种含有LSTM区块(blocks)或其他的一种类神 ...

  10. OpenCV中确定像素位置及获取、修改像素BGR值讲解及演示(Python实现 附源码)

    需要源码和图片集请点赞关注收藏后评论区留言~~~ 像素是图像的最小单位.每一幅图像都是由M行N列的像素组成的,其中每一个像素都存储一个像素值.以灰度图像为例,计算机通常把灰度图像的像素处理为256个灰 ...

最新文章

  1. 2017-12-25 Linux学习笔记
  2. RedHat Enterprise Linux Server 5 安装序列号
  3. TypeScript 使用 字典 Dictionary
  4. 2016 EasyAR 开发者大会定档AWE,AR SDK重大升级进入倒计时
  5. python typing typescript_将 python 数据转化为 TypeScript 格式
  6. 056、macvlan网络结构分析(2019-03-25 周一)
  7. 欢乐纪中某A组赛【2019.7.9】
  8. 暑期实习NLP算法岗面经总结
  9. 社区首款 OAM 可视化平台发布!
  10. 为什么说string是引用类型,但是又有值类型的特点呢?
  11. ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services
  12. 为什么现在的手机用4个摄像头?越来越难看。就不能只用一个摄像头吗?
  13. 便于理解mysql内幕的各种逻辑图组
  14. pytorch和GPU有关操作(CUDA)
  15. 【保姆级】-spotfire服务端、客户端安装部署(V7.8)
  16. Web项目 引入Editormd
  17. 爬取中国知识产权案件网
  18. 电子计算机eniac的储存能力有限 只能,电子计算机ENIAC的存储能力有限,只能存储简单的控制程序代码。...
  19. Android 知识点——Method put in org.json.JSONObject not mocked
  20. mongodb 批量转换大写字符

热门文章

  1. Springboot启动报错:Failed to process import candidates for configuration class...
  2. None of the following candidates is applicable because of a receiver type mismatch
  3. JDK-8u131 软件安装教程
  4. TCP-Hybla拥塞算法
  5. 分数阶 计算机应用,基于分数阶Riemann-Liouville积分的图像去噪
  6. ArcGIS导入excel文件
  7. Chromium浏览器不能播放MP4
  8. 桌面图标的背景颜色怎么改成透明?
  9. 苹果手机计算机怎么放桌面,苹果手机桌面图标怎么随意摆放 iPhone桌面图标随意摆放教程 (全文)...
  10. 使用计算机能播放音乐也能观看视频,我电脑可以放歌有声音。怎么播放视频没声音啊?给我解决方案...