Python读取Excel数据并绘制折线图与散点图教程

沈亦白
沈亦白
发布时间:2026-10-12 | 2人浏览过
原创

本文详细介绍如何利用Python的pandas库读取Excel文件中的多表单数据,包括按行、列或指定范围提取数据,并将数据转换为字典格式。同时,结合matplotlib库演示如何绘制简单的折线图与散点图,涵盖坐标轴设置、颜色映射、轮廓控制及自动保存图表等关键参数配置,帮助开发者快速实现数据可视化。

导入必要的Python库

import pandas as pd
import matplotlib.pyplot as plt

绘制基础折线图的方法

示例数据源为一个名为lemon.xlsx的Excel文件,该文件包含两个工作表,分别命名为Python和student。

Python工作表的具体数据内容如下所示:

student工作表的具体数据内容如下所示:

1、在使用pandas模块处理Excel之前,首先需要导入该模块,参考代码如下:

import pandas as pd

2、读取Excel文件主要有以下两种常用方式:

#方法一:默认读取第一个表单
df=pd.read_excel('lemon.xlsx')#这个会直接默认读取到这个Excel的第一个表单
data=df.head()#默认读取前5行的数据
print("获取到所有的值:\n{0}".format(data))#格式化输出

执行上述代码后,返回的结果是一个二维矩阵,具体展示如下:

#方法二:通过指定表单名的方式来读取
df=pd.read_excel('lemon.xlsx',sheet_name='student')#可以通过sheet_name来指定读取的表单
data=df.head()#默认读取前5行的数据
print("获取到所有的值:\n{0}".format(data))#格式化输出

另一种读取方式得到的结果同样为二维矩阵,展示如下:

#方法三:通过表单索引来指定要访问的表单,0表示第一个表单
#也可以采用表单名和索引的双重方式来定位表单
#也可以同时定位多个表单,方式都罗列如下所示
df=pd.read_excel('lemon.xlsx',sheet_name=['python','student'])#可以通过表单名同时指定多个
# df=pd.read_excel('lemon.xlsx',sheet_name=0)#可以通过表单索引来指定读取的表单
# df=pd.read_excel('lemon.xlsx',sheet_name=['python',1])#可以混合的方式来指定
# df=pd.read_excel('lemon.xlsx',sheet_name=[1,2])#可以通过索引 同时指定多个
data=df.values#获取所有的数据,注意这里不能用head()方法哦~
print("获取到所有的值:\n{0}".format(data))#格式化输出

三、使用pandas对Excel数据进行行列操作

1、读取指定的单行数据,结果将存储在一个列表中

#1:读取指定行
df=pd.read_excel('lemon.xlsx')#这个会直接默认读取到这个Excel的第一个表单
data=df.ix[0].values#0表示第一行 这里读取数据并不包含表头,要注意哦!
print("读取指定行的数据:\n{0}".format(data))

执行后的具体输出结果如下:

2、读取指定的多行数据,结果将存储在一个嵌套列表中

df=pd.read_excel('lemon.xlsx')
data=df.ix[[1,2]].values#读取指定多行的话,就要在ix[]里面嵌套列表指定行数
print("读取指定行的数据:\n{0}".format(data))

3、读取指定的特定行列数据

df=pd.read_excel('lemon.xlsx')
data=df.ix[1,2]#读取第一行第二列的值,这里不需要嵌套列表
print("读取指定行的数据:\n{0}".format(data))

4、读取指定的多行且包含多列的数据值

df=pd.read_excel('lemon.xlsx')
data=df.ix[[1,2],['title','data']].values#读取第一行第二行的title以及data列的值,这里需要嵌套列表
print("读取指定行的数据:\n{0}".format(data))

5、获取所有行中指定的列数据

df=pd.read_excel('lemon.xlsx')
data=df.ix[:,['title','data']].values#读所有行的title以及data列的值,这里需要嵌套列表
print("读取指定行的数据:\n{0}".format(data))

6、获取并打印输出所有行的行号

df=pd.read_excel('lemon.xlsx')
print("输出行号列表",df.index.values)
 
输出结果是:
输出行号列表 [0 1 2 3]

7、获取并打印输出所有列的列名

df=pd.read_excel('lemon.xlsx')
print("输出列标题",df.columns.values)
 
运行结果如下所示:
输出列标题 ['case_id' 'title' 'data']

8、获取指定行数范围的数据值

df=pd.read_excel('lemon.xlsx')
print("输出值",df.sample(3).values)#这个方法类似于head()方法以及df.values方法
 
输出值
 [[2 '输入错误的密码' '{"mobilephone":"18688773467","pwd":"12345678"}']
 [3 '正常充值' '{"mobilephone":"18688773467","amount":"1000"}']
 [1 '正常登录' '{"mobilephone":"18688773467","pwd":"123456"}']]

9、获取指定列名的所有数据值

df=pd.read_excel('lemon.xlsx')
print("输出值\n",df['data'].values)

四、将pandas处理的Excel数据转换为字典格式

假设我们有如下结构的数据:

目标是将这些数据处理为列表嵌套字典的形式,其中字典的键(key)对应Excel的表头名称。

实现该转换的具体代码如下:

df=pd.read_excel('lemon.xlsx')
test_data=[]
for i in df.index.values:#获取行号的索引,并对其进行遍历:
    #根据i来获取每一行指定的数据 并利用to_dict转成字典
    row_data=df.ix[i,['case_id','module','title','http_method','url','data','expected']].to_dict()
    test_data.append(row_data)
print("最终获取到的数据是:{0}".format(test_data))

最终生成的结果如下所示:

最终获取到的数据是:
[{'title': '正常登录', 'case_id': 1, 'data': '{"mobilephone":"18688773467","pwd":"123456"}'}, 
{'title': '输入错误的密码', 'case_id': 2, 'data': '{"mobilephone":"18688773467","pwd":"12345678"}'}, 
{'title': '正常充值', 'case_id': 3, 'data': '{"mobilephone":"18688773467","amount":"1000"}'}, 
{'title': '充值输入负数', 'case_id': 4, 'data': '{"mobilephone":"18688773467","amount":"-100"}'}]

五、绘制基础折线图

绘图所使用的数据来源如下:

# -*- coding: utf-8 -*-
"""
Created on Tue Sep 29 18:24:14 2020
@author: chenj
"""
# 导入 pandas 和 matplotlib
import pandas as pd
import matplotlib.pyplot as plt
 
# 读取文件
# =============================================================================
# 可能遇到的问题 路径分隔符 建议用“/”或“\\”  读取桌面文件时 用“\”可能会失败 
# =============================================================================
data_source = pd.read_excel('F:/南师2020作业/人工智能/datas.xlsx')
# 函数plot()尝试根据数字绘制出有意义的图形
print(data_source['datas'])
plt.plot(data_source['datas'])

六、绘制基础散点图

使用scatter函数绘制散点图并配置其样式:1、绘制单个数据点,调用scatter函数并传入x和y坐标值,可通过参数s指定点的大小。

plt.scatter(2,4,s=20)

2、绘制一组数据点,向scatter函数传递包含x值列表和y值列表的两个参数。

x_values=[1,2,3,4,5]
y_values=[1,4,9,16,25]
plt.scatter(x_values,y_values,s=20)

3、设置坐标轴的取值范围:调用axis()函数需提供四个参数,分别对应x轴和y轴的最大值与最小值。

plt.axis([0,1100,0,1100000])

4、通过参数edgecolor在scatter函数中设置数据点的轮廓颜色。

plt.scatter(x_values,y_values,edgecolor='black',s=20)

当该参数设置为'none'时,数据点将不显示轮廓。

5、向scatter函数传递参数c,以指定数据点的填充颜色。

颜色参数可以使用颜色名称,也可以使用RGB颜色模式自定义颜色,此时元组内需包含三个介于0到1之间的小数值,分别代表红、绿、蓝三种颜色分量。

plt.scatter(x_values,y_values,c=(0,0,0.8),edgecolor='none',s=20)为由浅蓝色组成的散点图

6、应用颜色映射(Colormap)。

颜色映射是一系列渐变的颜色,用于可视化中突出数据的规律,例如用浅色表示较小数值,深色表示较大数值。matplotlib模块内置了多组颜色映射,使用时需告知pyplot如何根据数据集中的每个点分配颜色。

plt.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Blues,s=40)
plt.title("Square numbers",fontsize=24)

我们将参数c设置为一个y值列表,并通过参数cmap指定使用的颜色映射名称。上述代码将y值较小的点显示为浅蓝色,y值较大的点显示为深蓝色。

7、实现图表的自动保存:调用函数plt.savefig()。

plt.savefig('D:/www/figure.png',bbox_inches='tight')

该函数的第一个参数为保存的文件名,第二个参数bbox_inches='tight'用于去除图表周围多余的空白区域;若需保留空白区域,可省略此参数。

8、设置绘图窗口的尺寸大小

figure函数用于指定图表的宽度、高度、分辨率及背景色。参数figsize接收一个元组,向matplotlib指定绘图窗口的尺寸,单位为英寸;参数dpi用于设置分辨率,默认值为80。

plt.figure(dpi=128,figsize=(10,6))

9、完整实例程序代码

#a.py
import matplotlib.pyplot as plt
x_values=list(range(1,1001))
y_values=[x**2 for x in x_values]
plt.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Blues,s=40)
plt.title("Square numbers",fontsize=24)
plt.xlabel("value",fontsize=24)
plt.ylabel("Square of Value",fontsize=24)
plt.tick_params(axis='both',labelsize=14)
plt.axis([0,1100,0,1100000])
plt.savefig('D:/www/figure.png',bbox_inches='tight')
plt.show()
# 导入 pandas 和 matplotlib
import pandas as pd
import matplotlib.pyplot as plt
# 导入中文显示库函数
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)
 
# 读取文件
df = pd.read_excel("F:/南师2020作业/人工智能/datas.xlsx")
# 输出数据行数
print("数据行数:" , len(df))
'''
由于只有一列数据我们使用 excel 行号作为 x 值的列表
用range()函数来创建一个列表 [1,24)
range()函数 遍历数字序列
'''
x = list(range(1,len(df)+1)) #[1,24)
# 读取指定的单列也就是 datas列,数据会存在列表里面
y = df['datas']
# for 循环输出数据行数
for a in (list(range(1,len(df)+1))):
    print('行号:'+str(a)) #将int类型的a 转换为字符串
 
#设置 x值 和y值的列表
plt.scatter(x,y)
# 图表名称
plt.title('散点图',fontproperties=font_set)
# 设置x轴名称
plt.xlabel("X")
# 设置y轴名称
plt.ylabel("Y")
plt.show()

至此,关于Python读取Excel数据并绘制折线图及散点图的教程介绍完毕,更多相关Python读取Excel文件数据的内容请搜索本站历史文章或继续浏览后续文章,感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表