pythontxt⽂件读写pandas_Python数据分析之Pandas读写外
部数据⽂件!
阅读⽬录
1 引⾔
2 ⽂本⽂件(txt、csv)
2.1 读取数据
2.2 写⼊数据
3 excel⽂件
3.1 读取数据
3.2 写⼊数据
4 mysql数据库
5 mongodb数据库
1 引⾔
数据分析、数据挖掘、可视化是Python的众多强项之⼀,但⽆论是这⼏项中的哪⼀项都必须以数据作为基础,数据通常都存储在外部⽂件中,例如txt、csv、excel、数据库。本篇中,我们来捋⼀捋Python中那些外部数据⽂件读取、写⼊的常⽤⽅法。
下表是Pandas官⽅⼿册上给出的⼀张表格,表格描述的是Pandas中对各种数据⽂件类型的读、写函数,你可以直接在官⽅⼿册中到:
通过阅读表格,可以发现,Pandas中提供了⾮常丰富的数据读写⽅法。不过本⽂只讲述⽂本⽂件(txt、csv)、excel⽂件、关系型数据库(mysql)、⾮关系型数据库(mongodb)的读写⽅式。
2 ⽂本⽂件(txt、csv)
⽆论是txt⽂件还是csv⽂件,在Pandas中都使⽤read_csv()⽅法读取,当然也使⽤同⼀个⽅法写⼊到⽂件,那就是to_csv()⽅法。
我们先来说说怎么读取数据。所要读取的⽂件名为“data.csv",⽂件内容⽤记事本打开后如下所⽰:
2.1 读取数据
为了提供更加多样化、可定制的功能,read_csv()⽅法定义了参数数⼗个参数,还好的是⼤部分参数并不常⽤,⽽且绝⼤多数情况使⽤默认值就可以,所以只需要记住以下的⼏个⽐较常⽤的参数就可以了:
(1)filepath_or_buffer:⽂件所在路径,可以是⼀个描述路径的字符串、pathlib.Path对象、http或ftp的连接,也可以是任何可调⽤
read()⽅法的对象。这个参数是唯⼀⼀个必传的参数。
>>> import pandas as pd>>> df = pd.read_csv('data.csv', encoding='gbk')>>> df姓名 语⽂ 数学 英语0 陈⼀ 89 90 671 赵⼆ 70
78 902 张三 87 86 793 李四 90 69 844 王五 78 80 69
(2)encoding :编码,字符型,通常为'utf-8',如果中⽂读取不正常,可以将encoding设为’gbk‘。
在上⾯打开data.csv⽂件的例⼦中,如果不指定encoding='gbk'则会出现下⾯的异常。当然,你也可以在记事本中通过另存为的⽅式将编码修改为utf-8,这样就可以使⽤默认的utf-8编码。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid continuation byte
(3)sep:分隔符,默认为⼀个英⽂逗号,即','。
(4)delimiter :备选分隔符,如果指定了delimiter则sep失效。
(5)header :整数或者由整数组成的列表,以⽤来指定由哪⼀列或者哪⼏列作为列名,默认为header=0,表⽰第⼀列作为列名。
>>> pd.read_csv('data.csv', encoding='gbk', header=1) # 指定第⼆列作为列名陈⼀ 89 90 670 赵⼆ 70 78 901 张三 87 86 792李四 90 69 843 王五 78 80 69
可以看到,当指定第⼀⾏之后的数据作为列名时,前⾯的所有⾏都会被略过。
也可以传递⼀个包含多个整数的列表给header,这样每⼀列就会有多个列名。如果中间某⼀⾏没有指定,那么改⾏会被略过,例如下⾯的第三⾏:
>>> df = pd.read_csv('data.csv', encoding='gbk', header=[0,1,3])>>> df姓名 语⽂ 数学 英语陈⼀ 89 90 67张三 87 86 790 李四90 69 841 王五 78 80 69
当⽂件中没有列名⼀⾏数据时,可以传递header=None,表⽰不从⽂件数据中指定⾏作为列名,这是Pandas会⾃动⽣成从零开始的序列作为列名:
>>> df = pd.read_csv('data.csv', encoding='gbk', header=None)>>> df0 1 2 30 姓名 语⽂ 数学 英语1 陈⼀ 89 90 672 赵⼆ 70
78 903 张三 87 86 794 李四 90 69 845 王五 78 80 69
(6)names:⼀个列表,为数据额外指定列名。
>>> df = pd.read_csv('data.csv', encoding='gbk', names=['第⼀列', '第⼆列', '第三列', '第四列'])>>> df第⼀列 第⼆列 第三列 第四列0
姓名 语⽂ 数学 英语1 陈⼀ 89 90 672 赵⼆ 70 78 903 张三 87 86 794 李四 90 69 845 王五 78 80 69
2.2 写⼊数据
to_csv()⽅法可以将Pandas数据写⼊到⽂本⽂件中,常⽤参数如下:
(1)path_or_buf:表⽰路径的字符串或者⽂件句柄。例如,将上⾯读取出来的数据写⼊到名为⽂件中:
<_csv('')
如果⽂件不存在,则会新建⽂件后再写⼊,如果本来已存在该⽂件,则会清空后再写⼊,写⼊后⽂件内容如下:
,第⼀列,第⼆列,第三列,第四列
0,姓名,语⽂,数学,英语
1,陈⼀,89,90,67
2,赵⼆,70,78,90
3,张三,87,86,79
4,李四,90,69,84
5,王五,78,80,69
可以看到,⽆论是⾏索引还是列名和真实数据都写⼊到了⽂件中。
(2)sep:分隔符,默认为因为逗号’,‘。例如指定分隔符为’-‘将之前读取的数据写⼊⽂件中:
>>> df.to_csv('', sep='*')
写⼊后⽂件内容如下:
*第⼀列*第⼆列*第三列*第四列0*姓名*语⽂*数学*英语1*陈⼀*89*90*672*赵⼆*70*78*903*张三*87*86*794*李四*90*69*845*王五
*78*80*69
(3)header:元素为字符串的列表,或布尔型数据。当为列表时表⽰重新指定列名,当为布尔型时,表⽰是否写⼊列名:
<_csv('', header=['第1列', '第2列', '第3列', '第4列'])
写⼊数据后⽂件内容:
,第1列,第2列,第3列,第4列0,姓名,语⽂,数学,英语1,陈⼀,89,90,672,赵⼆,70,78,903,张三,87,86,794,李四,90,69,845,王五,78,80,69
(4)columns:⼀个列表,重新指定写⼊⽂件中列的顺序。
<_csv('', columns=['第四列', '第⼆列', '第三列', '第⼀列'])
写⼊后⽂件内容:
,第四列,第⼆列,第三列,第⼀列0,英语,语⽂,数学,姓名1,67,89,90,陈⼀2,90,70,78,赵⼆3,79,87,86,张三4,84,90,69,李四5,69,78,80,王五
(5)index_label :字符串或布尔型变量,设置索引列列名:
>>> df.to_csv('', index_label='index')
写⼊后⽂件内容:
index,第⼀列,第⼆列,第三列,第四列
0,姓名,语⽂,数学,英语
1,陈⼀,89,90,67
2,赵⼆,70,78,90
3,张三,87,86,79
4,李四,90,69,84
5,王五,78,80,69
>>> df.to_csv('', index_label=False)
第⼀列,第⼆列,第三列,第四列
0,姓名,语⽂,数学,英语
1,陈⼀,89,90,67
2,赵⼆,70,78,90
3,张三,87,86,79
4,李四,90,69,84
5,王五,78,80,69
(6)index:布尔型,是否写⼊索引列,默认为True
>>> df.to_csv('', index=False, index_label=False)
第⼀列,第⼆列,第三列,第四列
姓名,语⽂,数学,英语
陈⼀,89,90,67
赵⼆,70,78,90
张三,87,86,79
李四,90,69,84
王五,78,80,69
(7)encoding:写⼊的编码,默认是utf-8。
>>> df.to_csv('data_1.csv', encoding='gbk')
写⼊后⽂件内容:
第⼀列,第⼆列,第三列,第四列
0,姓名,语⽂,数学,英语
1,陈⼀,89,90,67
2,赵⼆,70,78,90
3,张三,87,86,79
4,李四,90,69,84
5,王五,78,80,69
3 excel⽂件
在使⽤pandas读取excel⽂件之前,需要先安装Python读取excel的依赖包:xlrd,可以使⽤pip命令从⾖瓣源上下载:
⽰例⽂件名为data.xlsl,⾥⾯有两张sheet,sheet1内容如下:
Sheet2内容如下:
3.1 读取数据
pandas读取excel数据通过reade_excel⽅法,下⾯通过实例来感受⼀下read_excel⽅法的⼏个常⽤参数:
(1)io:需要读取的⽂件,可以是⽂件路径、⽂件⽹址、file-like对象、xlrd workbook对象。这是唯⼀⼀个必填的参数。
>>> pd.read_excel('data.xlsx')姓名 语⽂ 数学 英语0 陈⼀ 89 90 671 赵⼆ 70 78 902 张三 87 86 793 李四 90 69 844 王五 78
80 69
(2)sheet_name :指定需要读取的Sheet。有⼀下⼏种情况:
整型:通过数字索引读取Sheet,索引从0开始,sheet_name默认参数就是0,表⽰读取第⼀张Sheet。
>>> pd.read_excel('data.xlsx', sheet_name=1)姓名 语⽂ 数学 英语0 李⽩ 70 80 901 杜浦 70 80 902 王安⽯ 70 80 903 苏东坡70 80 904 李清照 70 80 90
字符型:通过名称来读取Sheet。
>>> pd.read_excel('data.xlsx', sheet_name='Sheet2')姓名 语⽂ 数学 英语0 李⽩ 70 80 901 杜浦 70 80 902 王安⽯ 70 80 903 苏东坡 70 80 904 李清照 70 80 90
列表:指定多个需要读取的Sheet,列表的元素可以使索引,也可以是字符串,例如[0, 1, 'Sheet3']表⽰读取第⼀张、第⼆张和名为
Sheet3的3张Sheet,返回的数据是以列表元素为键包含数据的DataFrame对象为值的字典。
>>> data = pd.read_excel('data.xlsx', sheet_name=[0, 'Sheet2'])>>> data[0]姓名 语⽂ 数学 英语0 陈⼀ 89 90 671 赵⼆ 70 78
902 张三 87 86 793 李四 90 69 844 王五 78 80 69>>> data['Sheet2']姓名 语⽂ 数学 英语0 李⽩ 70 80 901 杜浦 70 80 902 王安⽯ 70 80 903 苏东坡 70 80 904 李清照 70 80 90
None:表⽰读取所有Sheet,返回的是以Sheet名为键,包含数据的DataFrame对象为值的字典。
>>> data = pd.read_excel('data.xlsx', sheet_name=None)>>> data['Sheet1']姓名 语⽂ 数学 英语0 陈⼀ 89 90 671 赵⼆ 70 78
902 张三 87 86 793 李四 90 69 844 王五 78 80 69>>> data['Sheet2']姓名 语⽂ 数学 英语0 李⽩ 70 80 901 杜浦 70 80 902 王安⽯ 70 80 903 苏东坡 70 80 904 李清照 70 80 90
(3)header:指定Sheet的表头,参数可以表⽰⾏索引是整型,表⽰指定哪⼀⾏作为表头,默认值是0,表⽰以第⼀⾏作为表头。也可以是元素为整型的列表,表⽰选⽤多⾏作为表头。
>>> pd.read_excel('data.xlsx', sheet_name='Sheet2', header=1) # 整型指定⼀⾏作为表头李⽩ 70 80 900 杜浦 70 80 901 王安⽯70 80 902 苏东坡 70 80 903 李清照 70 80 90>>> pd.read_excel('data.xlsx', sheet_name='Sheet2', header=[0,2]) # 列表指定多⾏作为表头姓名 语⽂ 数学 英语杜浦 70 80 900 王安⽯ 70 80 901 苏东坡 70 80 902 李清照 70 80 90
(4)index_col :指定⾏标签,或者说⾏名。当时⼀个整数时,表⽰指定某⼀⾏⾏作为⾏标签,当是⼀个列表(元素都为整型)时,表⽰指定多列作为⾏标签。默认值为None,表⽰⾃动⽣成以0开始的整数作为⾏标签。
>>> pd.read_excel('data.xlsx', sheet_name=0, index_col=0) # 指定第⼀⾏作为⾏标签语⽂ 数学 英语姓名陈⼀ 89 90 67赵⼆ 70 78 90张三 87 86 79李四 90 69 84王五 78 80 69>>> pd.read_excel('data.xlsx', sheet_name=0, index_col=[0, 1]) # 指定第⼀⾏第⼆⾏作为⾏标签数学 英语姓名 语⽂陈⼀ 89 90 67赵⼆ 70 78 90张三 87 86 79李四 90 69 84王五 78 80 69
(5)usecols:指定需要加载的列,参数有以下⼏种情况:
默认值None:表⽰加载所有列
单个整数:加载指定⼀列,但这种⽅式未来会被取消,加载单⾏也最好放在列表⾥。
>>> pd.read_excel('data.xlsx', sheet_name=0, usecols=1)姓名 语⽂0 陈⼀ 891 赵⼆ 702 张三 873 李四 904 王五 78
元素为整数的列表:加载指定多列。
>>> pd.read_excel('data.xlsx', sheet_name=0, usecols=[0,2,3])姓名 数学 英语0 陈⼀ 90 671 赵⼆ 78 902 张三 86 793 李四 69 844 王五 80 69
3.2 写⼊数据
将数据写⼊excel得通过DataFrame对象内定义的to_excel()⽅法。在使⽤to_excel()⽅法前,也有⼀个第三⽅库需要装,那就是openpyxl:
to_excel()⽅法常⽤参数如下:
(1)excel_writer:必传参数,指定需要写⼊的excel⽂件,可以使表⽰路径的字符串或者ExcelWriter类对象。
(2)sheet_name:指定需要将数据写⼊到哪⼀张⼯作表,默认值是Sheet1
(3)float_format:指定浮点型数的格式,例如当指定float_format="%%.2f"时,0.1234将会转为0.12。python怎么读取excel文件数据
(4)na_rep:字符型,写⼊数据时⽤什么代替空值。
>>> import pandas as pd>>> pd.read_excel('data.xlsx')姓名 语⽂ 数学 英语0 陈⼀ 89.0 90.0 67.01 赵⼆ NaN 78.0 90.02 张三87.0 NaN 79.03 李四 90.0 69.0 NaN4 王五 78.0 80.0 69.0>>> df = pd.read_excel('data.xlsx')>>> df.to_excel('data_1.xlsx',
na_rep='--')
写⼊后⽂件内容如下所图⽰:
(5)header:是否写⼊表头,值可以使布尔型或者元素为字符串的列表,默认为True表⽰写⼊表头。
>>> df.to_excel('data_1.xlsx', header=['第⼀列', '第⼆列', '第三列', '第四列'])
写⼊⽂件内容如下:
(6)index:是否写⼊⾏号,值为布尔型,默认为True,当为False时上⾯图中第⼀列的⾏号就不会写⼊了。
(7)columns:指定需要写⼊⽂件的列,值是元素为整型或字符串的列表。
4 mysql数据库
在名为test的数据库中有⼀张student的表,表结构和数据如下所⽰:
现在通过pandas来读取student表数据。在读取数据之前,先要安装Python读取mysql的第三⽅库:
pandas读取mysql数据库时通过pandas中的read_mysql()⽅法,主要参数如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。