0. 背景

最近需要用到python通过读取,写入Excel数据,并画一些图。虽然以前学过一些,但是都忘得差不多了,故翻出以前学习的资料,整理在此,常用常新,也方便自己以后复习。

1. 通过pandas库在Python里写入数据到Excel,并生成本地文件(001)

代码:

import pandas as pd  #导入pandas模块,将pandas简写为pddf = pd.DataFrame({'ID':(1,2,3),'Name':('Tim','Victor','Nick')})  #生成两列,一列是ID,一列是Name
df = df.set_index('ID')        #用ID这列来替代默认的index
df.to_excel('D:/py学习/Python_EXCEL/output.xlsx')    #生成一个excel文件
print('Done!')

输出样式:

2. 通过pandas库读取本地Excel文件,并直接在Python里显示(002)

代码:

import pandas as pdIncites = pd.read_excel('D:/py学习/Python_EXCEL/Incites.xlsx')
print(Incites.shape)         # 显示有表格中有(几行,几列)
print(Incites.columns)       # 输出表头,也就是第一行
print(Incites.head(3))       # 输出前三行
print('========================')
print(Incites.tail(3))       #输出后三行

输出样式:

3. 通过pandas库在Python里写多行多列数据的格式(不生成本地文件)(003)

代码:

import pandas as pds1 = pd.Series([1,2,3],index = [1,2,3],name = 'A')
s2 = pd.Series([10,20,30],index = [1,2,3],name = 'B')
s3 = pd.Series([100,200,300],index = [2,3,4],name = 'C')df = pd.DataFrame({s1.name:s1,s2.name:s2,s3.name:s3})  # 将A,B,C按列来写入
# df = pd.DataFrame([s1,s2,s3])             # 将A,B,C按行来写入
print(df)

输出样式:
![![![在这里插入图片描述](https://img-blog.csdnimg.cn/f1544c2b30e0473da830251a4444a7cb.png#pic_center)

4. 通过pandas将本地Excel中的数据排序,分类,并直接在Python里显示(007)

代码:

import pandas as pdproducts = pd.read_excel('D:/py学习/Python_EXCEL/List.xlsx', index_col='ID')# products.sort_values(by='Price',inplace=True,ascending=False)   #inplace=True意思为不创建新的对象,直接对原始对象进行修改;\# ascending=False将Price这一列从高到低排序,将False改为True则变为从低到高排序
products.sort_values(by=['Worthy', 'Price'], inplace=True, ascending=[True, False])   # 分成两列进行操作,先将Worthy分为No在上,YES在下;再将No的Price从高到底排列,Yes的Price也从高到底排列
print(products)

输出样式:



5. 通过pandas库在Python实现对本地Excel中数值大小范围的筛选,将直接在Python里显示(不保存到原Excel文件)(008)

初始数据:

对学生的Age(18-30)和分数(85-100)两个参数进行筛选。

代码:

import pandas as pd# 年龄筛选函数
def age_18_to_30(a):return a>=18 and a<=30    # 或者写为18<=a<=30,这是Python特有的写法# 得分筛选函数
def level_a(s):return s>=85 and s<=100   # 或者写为85<=s<=100,这是Python特有的写法students = pd.read_excel('D:/py学习/Python_EXCEL/Students.xlsx', index_col='ID')
# students = students.loc[students['Age'].apply(age_18_to_30)]    # 用loc获取Age元素,再apply(调用)年龄筛选函数
# students = students.loc[students.Age.apply(age_18_to_30)]        # 上一行的用loc获取Age元素也可以写成这样,这是Python特有的写法
students = students.loc[students['Age'].apply(age_18_to_30)].loc[students['Score'].apply(level_a)]   # 在上一句基础上再用loc获取Score元素,再apply(调用)得分筛选函数
# students = students.loc[students['Age'].apply(lambda a: 18<=a<=30)].loc[students['Score'].apply(lambda s: 85<=s<=100)] #也可以用lambda,删掉两个def和上一行,只用这一行就能实现
print(students)

输出样式:

6. 通过pandas库读取本地Excel文件,并通过matplotlib在Python里画出柱形图(bar_chart)(009)

原数据:

将该数据画成直方图

代码:

import pandas as pd
import matplotlib.pyplot as plt  # 导入画柱状图模块;将matplotlib简写为pltstudents = pd.read_excel('D:/py学习/Python_EXCEL/Res_areas.xlsx')
students.sort_values(by='Documents_number', inplace=True, ascending=False)    # 将Documents_number从高到低排序
print(students)
# students.plot.bar(x='Name',y='Documents_number',color='orange')     #(这是用的pandas绘图),plot.bar为条(柱)状图意思;给x,y对应的head;如果不定义颜色,则默认为蓝色
plt.bar(students.Name, students.Documents_number, color='orange')        #(这是用的matplotlib绘图);给x,y对应的head;如果不定义颜色,则默认为蓝色
plt.xticks(students.Name, rotation='90')                # 将x轴旋转90度,不然全连成一排密密麻麻看不清楚
plt.xlabel('Name')                   # 给x轴命名
plt.ylabel('Documents_number')         # 给y轴命名
plt.title('Wos of Science Res_areas')       # 给该柱状图命名
plt.tight_layout()                           # 设置为紧凑型布局,不然x轴head显示不全
plt.show()    # 出图

输出样式:

7. 通过pandas库读取本地Excel文件,并通过matplotlib在Python里画出双柱形图(double_bar_chart)(010)

原数据:

将该数据画成双柱形图

代码:

import pandas as pd
import matplotlib.pyplot as pltstudents = pd.read_excel('D:/py学习/Python_EXCEL/Res_areas_double.xlsx')
students.sort_values(by='2021', inplace=True, ascending=False)       #按2021列从高到低排序
print(students)
students.plot.bar(x='Res_areas', y=['2020', '2021'], color=['orange','r' ])    # 用列表来定义两个y元素和两种颜色,excel中的head和x和y不能是纯数字,会找不到报错,得在EXCEL的head中的数字前面加';也不能有中文,图里显示不出来
plt.title('Wos of Science Res_areas',fontsize=16,fontweight='bold')       # 给该柱状图命名;规定字号16;粗体
plt.xlabel('Res_areas', fontweight='bold')
plt.ylabel('Documents_number', fontweight='bold')
ax = plt.gca()           # gca=get current axis,获取当前坐标轴
ax.set_xticklabels(students['Res_areas'], rotation='45', ha='right')      # 将x轴的ticklabels旋转45度;ha=horizontal alignment,以右边为中心点水平对齐;会自带xlabel,但不能像第9行那样显示字体字号
f = plt.gcf()           # gca=get current figure,获取当前图形,指figure黑色框里的部分
f.subplots_adjust(left=0.2,bottom=0.45)        # 左边留出20%空白,底部留出42%空白
# plt.tight_layout()             # 设置为紧凑型布局,不然x轴head显示不全,这是比较笼统的布局,上两行是精确布局,两种方法不同时使用
plt.show()

输出样式:

8. 通过pandas库读取本地Excel文件,并通过matplotlib在Python里画出堆叠柱形图(stacked_chart)(011)

原数据:

将该数据画成堆叠柱形图

代码:

import pandas as pd
import matplotlib.pyplot as pltusers = pd.read_excel('D:/py学习/Python_EXCEL/Users.xlsx')
users['Total'] = users['Oct'] + users['Nov'] + users['Dec']   # 新增一列Total
users.sort_values(by='Total', inplace=True, ascending=True)      # ascending为离0点越近的越大
print(users)users.plot.barh(x='Name', y=['Oct', 'Nov', 'Dec'], stacked=True, title='User Behavior')  # 在bar后面加个h表示横向显示;用stacked将三条柱状图堆叠起来;给定title
#plt.title('User Behavior', fontsize=16, fontweight='bold')     #给定title,也可以像上一行一样,但是上一行不能自定义title字号字体
plt.tight_layout()
plt.show()

输出样式:

9. 通过pandas库读取本地Excel文件,并通过matplotlib在Python里画出饼图(piechart)(012)

原数据:

将该数据画成饼图

代码:

import pandas as pd
import matplotlib.pyplot as pltpapers = pd.read_excel('D:/py学习/Python_EXCEL/papers.xlsx', index_col='国家/地区')   # 不用index指定饼图的每一块表示什么的话它就默认用index来显示了
print(papers)papers['2020'].plot.pie(fontsize=8, counterclock=False, startangle=-270)          # 用couterclock顺时针排序,,起点为-270度,也可用下行所示,但是麻烦了
# papers['2020'].sort_values(ascending=True).plot.pie(fontsize=8, startangle=-270)     # 顺时针排序,之前的是bar,生成的条形图,这次是pie,生成饼状图,起点为-270度
plt.title('Source of Web of Science Papers', fontsize=16, fontweight='bold')
plt.ylabel('2020', fontsize=12, fontweight='bold')
plt.show()

输出样式:

10. 通过pandas库读取本地Excel文件,并通过matplotlib在Python里画出堆积图(stacked_area_chart)(013)

原数据:

10.1 将该数据画成堆积图

代码:

import pandas as pd
import matplotlib.pyplot as pltyears = pd.read_excel('D:/py学习/Python_EXCEL/Years.xlsx', index_col='Year')
print(years)
print(years.columns)   # 打印表头years.plot.area(y=['USA', 'China', 'UK'])    # plot后不加.area就默认是折线图了;plot后加一个.area就是叠加区域图
# years.plot.barh(y=['USA', 'China', 'UK'], stacked=True)
plt.title('Source of Country', fontsize=16, fontweight='bold')
plt.ylabel('Number of Papers', fontsize=12, fontweight='bold')
plt.xticks(years.index, fontsize=8, rotation='45', ha='right')
plt.show()

输出样式:

10.1 将该数据画成折线图(区别只在代码第8行plot少了.area)

代码:

import pandas as pd
import matplotlib.pyplot as pltyears = pd.read_excel('D:/py学习/Python_EXCEL/Years.xlsx', index_col='Year')
print(years)
print(years.columns)   # 打印表头years.plot.area(y=['USA', 'China', 'UK'])    # plot后不加.area就默认是折线图了;plot后加一个.area就是叠加区域图
# years.plot.barh(y=['USA', 'China', 'UK'], stacked=True)
plt.title('Source of Country', fontsize=16, fontweight='bold')
plt.ylabel('Number of Papers', fontsize=12, fontweight='bold')
plt.xticks(years.index, fontsize=8, rotation='45', ha='right')
plt.show()

输出样式:

11. 通过pandas库读取本地Excel文件,并通过matplotlib在Python里画出散点图(Bar_chart)(011)

原数据:

将该数据第二三列前五行画成散点图

代码:

import pandas as pd
import matplotlib.pyplot as pltpd.options.display.max_columns = 777  # 设置最大显示777列,这样打印的列就不会被省略号显示不全了
names = pd.read_excel('C:/Users/WJ/Desktop/Python_EXCEL/Names.xlsx')
print(names.head())   # 默认打印表头和前5行names.plot.scatter(x='Documents', y='Times_cited')  # 画散点图
plt.show()

输出样式:

12. 通过pandas库读取本地Excel文件,并通过matplotlib在Python里画出直方图(Histogram)(015)

注:关于直方图和柱形图的差别如下:
直方图一般用来描述等距数据或等比数据;柱形图一般用来描述称名数据或顺序数据。. 直观上,直方图矩形之间是衔接在一起的,表示数据间的数学关系;柱形图则留有空隙,表示仅作为两个或多个不同的类,而不具有数学相关性质。

原数据:

将该数据第二三列前五行画成直方图

代码:

import pandas as pd
import matplotlib.pyplot as pltpd.options.display.max_columns = 777  # 设置最大显示777列,这样打印的列就不会被省略号显示不全了
names = pd.read_excel('D:/py学习/Python_EXCEL/Names.xlsx')
print(names.head())   # 默认打印表头和前5行names.Times_cited.plot.hist(bins=100) # hist=histogram,画直方图;用bins细化100个区间,当样本量足够大时图像曲线看起来更平滑
plt.xticks(range(0, max(names.Times_cited), 500), fontsize=8, rotation=90) # 生成x轴刻度,获取Time_cited从0到最大值,再除以500=分度值print(names.corr())    # 用corr打印各行之间的相关系数,corr=correlationplt.tight_layout()
plt.show()

输出样式:

13. 通过pandas库读取本地Excel文件,并在Python将其转置输出(021)

原数据:

将该数据第二三列前五行画成散点图

代码:

import pandas as pdpd.options.display.max_columns=999        # 每行最大显示单元格为999,这样就不会被折叠了
videos = pd.read_excel('D:/py学习/Python_EXCEL/Videos.xlsx', index_col='Month')
table = videos.transpose()
print(table)

输出样式:

14. 通过pandas库读取本地csv格式文件,并在Python将其输出(022)

原数据:

代码:

import pandas as pdpd.options.display.max_columns=999     # 每行最大显示单元格为999,这样就不会被折叠了students1 = pd.read_csv('D:/py学习/Python_EXCEL/Incites_Pulication.csv')  # 用read_csv读取csv文件
print(students1)

输出样式:

15. 通过pandas库读取本地csv格式文件,并在Python将其输出(022)

原数据:


代码:

import pandas as pdpd.options.display.max_columns=999     # 每行最大显示单元格为999,这样就不会被折叠了students2 = pd.read_csv('D:/py学习/Python_EXCEL/info.txt')          # 读取TXT文件还是用read_csv
print(students2)

输出样式:

15. 通过pandas库读取本地csv格式文件,再通过scipy库对数据进行线性回归分析,并用matplotlib在Python将其输出(022)

原数据:


代码:

import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import linregress    # 导入scipy线性回归包num = pd.read_excel('D:/py学习/Python_EXCEL/Trendency.xlsx')
print(num)slope, intercept, r, p, std_err=linregress(num.Year, num.USA) # 关键点,调用这个scipy里的linregress函数可以直接得到slope斜率;intercept截距exp = num.Year*slope+intercept  # exp=exception,期望plt.scatter(num.Year, num.USA)  # 画散点图
plt.plot(num.Year, exp, color='orange') #画线图
plt.title(f"y={slope}*x+{intercept}")
plt.xticks(num.Year,  rotation=90)    # 设置x轴坐标参数刻度线
plt.tight_layout()
plt.show()print(slope*35+intercept)

输出样式:

使用Python对xlsx,csv, txt格式文件进行读、写并绘图相关推荐

  1. Python pandas 读取csv/txt数据文件 python读取csv/txt文件

    导读 主要利用pandas.read_csv接口对csv格式文件或txt文件进行读取,由于CSV格式文件使用非常频繁,功能强大,参数众多,因此在这里专门做详细介绍 使用示例 # 基础用法 import ...

  2. 上传分片切片大文件 XLSX/CSV/TXT

    当这个文件数据量也不是很多的时候,有很多前端工具可供选择.例如 SheetJS,就提供了从 Excel.CSV 中解析出用信息的很多方法, 当数据量只是几千条的程度的,选择的余地很多,但是一旦数据量级 ...

  3. python rtf转txt_将DOC、RTF格式文件批量转为TXT格式文件

    Windows 下将目录下所有文件下的文件 拷贝到一个目录中:搜索"." 安装python 及 win32com模块 pip install pypiwin32 创建LDA_RTF ...

  4. R—读取数据(导入csv,txt,excel文件)

    R-读取数据(导入csv,txt,excel文件) 转自:http://www.cnblogs.com/zhangduo/p/4440314.html 导入CSV.TXT文件 read.table函数 ...

  5. java将excel文件转换成txt格式文件

    在实际应用中,我们难免会遇到解析excel文件入库事情,有时候为了方便,需要将excel文件转成txt格式文件.下面代码里面提供对xls.xlsx两种格式的excel文件解析,并写入到一个新的txt文 ...

  6. python xlrd读取excel-使用Python xlrd模块读取Excel格式文件的方法

    这是一篇关于如何使用Python xlrd模块读取Excel格式文件的方法的文章,下面的python代码中使用 了xlrd模块的方法,这样就能够很方便的读取 excel 文件内容.同是这个xlrd模块 ...

  7. 如何把PDF文档转换成TXT格式文件

    在日常学习和日常工作中,如何将PDF文件转换为TXT文本? 尽管PDF文件的用户数量正在增加,但是TXT文本格式的接受度将会更高. 毕竟,TXT文本格式是任何设备都可以打开的格式.那么如何将PDF文件 ...

  8. 杭电Matlab与仿真-MATLAB基本语法(二)-数据文件的读/写操作

    数据文件的读/写操作 实验目的 实验内容与要求 实验程序与结果 实验目的 学会matlab数据输入与输出基本操作: 熟悉matlab各种文件的输入输出方法,了解常用的图片及音频文件的输入输出: 掌握用 ...

  9. C#实现csv文件or xls文件转换为txt格式文件的源码

    在做C#对接PLC数据写入.采集时,项目有一个环节需要把 csv或xls格式的文件转换为txt格式的文件. 以下是核心源码,未做包装. 聪明的你可以把它写成winform, 但请不要以此为任何商业目的 ...

最新文章

  1. 张一鸣:10年面试2000人,我发现混得好的人,全都有同一个特质
  2. java throw 什么意思_[转载]java中throw和throws的区别
  3. 红茶一杯话Binder(传输机制篇_中)
  4. Vmware 虚拟机提示:无法打开磁盘***.vmdk 无法启动虚拟机 解决办法
  5. 每天一道LeetCode-----KMP算法查找子串,重新实现strStr()函数
  6. Java Observer Pattern(观察者模式)
  7. priority_queue 优先队列
  8. 上怎么图片和字环绕_计算机上的0和1是怎么变成我们屏幕上看到的图片、视频和声音的?...
  9. 计算机组成原理本科生期末试卷答案,计算机组成原理本科生期末试题.doc
  10. 126套Unity3D视频教程全集(包含入门、编程、特效、UI、动画、实战等等)
  11. 杭电OJ刷题指南(ACM)
  12. linux中sendto函数路径,Linux下send、sendto、sendmsg函数分析
  13. 用Bat文件创建桌面快捷方式
  14. oracle sql语句加减,Oracle sql 常用加减法
  15. Go:go程序报错Cannot run program
  16. Flexbox 完整指南
  17. 今日份bug,点击win10任务栏视窗动态壁纸消失的bug,暂未发现解决方法。
  18. 【AGC035F】Two Histograms
  19. hdu计算机网络实验,计算机网络实验报告(杭电).doc
  20. MPC+HSM造就了安全的数字托管人

热门文章

  1. 【解决方案】智慧体育场馆大场景安防视频监控,可持续性保障大型场馆安全运行
  2. 好玩免费的api接口
  3. Windows11无法打开Windows安全中心(需要使用新应用打开此windowsdefender链接)
  4. 桥接模式和装饰器模式
  5. 高版本Android真机逆向测试环境搭建
  6. mysql 危险字符_PHP过滤指定字符串,过滤危险字符
  7. GitHub 近两万 Star,无需编码,可一键生成前后端代码,这个开源项目有点强!...
  8. w10投影全屏设置_教你win10连接投影仪显示比例不正常的解决教程
  9. 实验吧Web-难-猫抓老鼠
  10. 这份职业我有多少期许