700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用Python对xlsx csv txt格式文件进行读 写并绘图

使用Python对xlsx csv txt格式文件进行读 写并绘图

时间:2021-03-01 13:05:02

相关推荐

使用Python对xlsx csv  txt格式文件进行读 写并绘图

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,一列是Namedf = df.set_index('ID') #用ID这列来替代默认的indexdf.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-/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 pdimport 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 pdimport matplotlib.pyplot as pltstudents = pd.read_excel('D:/py学习/Python_EXCEL/Res_areas_double.xlsx')students.sort_values(by='', inplace=True, ascending=False) #按列从高到低排序print(students)students.plot.bar(x='Res_areas', y=['', ''], 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 pdimport matplotlib.pyplot as pltusers = pd.read_excel('D:/py学习/Python_EXCEL/Users.xlsx')users['Total'] = users['Oct'] + users['Nov'] + users['Dec'] # 新增一列Totalusers.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 pdimport matplotlib.pyplot as pltpapers = pd.read_excel('D:/py学习/Python_EXCEL/papers.xlsx', index_col='国家/地区') # 不用index指定饼图的每一块表示什么的话它就默认用index来显示了print(papers)papers[''].plot.pie(fontsize=8, counterclock=False, startangle=-270)# 用couterclock顺时针排序,,起点为-270度,也可用下行所示,但是麻烦了# papers[''].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('', fontsize=12, fontweight='bold')plt.show()

输出样式:

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

原数据:

10.1将该数据画成堆积图

代码:

import pandas as pdimport 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 pdimport 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 pdimport 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 pdimport 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_csvprint(students2)

输出样式:

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

原数据:

代码:

import pandas as pdimport matplotlib.pyplot as pltfrom 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)

输出样式:

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