Pandas读写文件

pandas 笔记009

九、Pandas文件操作

1.读
import numpy as np
import pandas as pd
1.1 read_csv()

ex1.csv文件打开如下:

abcdmessage
1234hello
5678world
9101112python

函数read_csv :从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号

a1 = pd.read_csv('ex1.csv') #ex1.csv文件自带列名(第一行作为列索引值,行索引自动补充)
a1
    a	b	c	d	message
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	python
1.2 read_table()

函数read_table : 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符("\t")

a2 = pd.read_table('ex1.csv')
a2
	a,b,c,d,message
0	1,2,3,4,hello
1	5,6,7,8,world
2	9,10,11,12,python
1.3 sep或delimiter(分隔符)

参数sep或delimiter(分隔符) : 用于对行中各字段进行拆分的字符序列或正则表达式

a3 = pd.read_table('ex1.csv',delimiter=',')  # 或sep=','
a3
    a	b	c	d	message
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	python
1.4 skiprows(忽略跳过行数)

参数skiprows : 需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始算起),默认skiprows=0

a4 = pd.read_csv('ex1.csv',skiprows=1)  #skiprows=1,跳过第一行(索引为0),skiprows=2,跳过第一和第二行,以此类推
a4
    1	2	3	4	hello
0	5	6	7	8	world
1	9	10	11	12	python
1.5 header(设置列名)

参数header : 用作列名的行号,默认header=0(第一行为列名),当header=None时,会自动给出行列索引而不是将原数据的行作为索引值,

ex2.csv如下:

1234hello
5678world
9101112python
b1 = pd.read_csv('ex2.csv') # 默认header=0,会将第一行作为列名
b1
	1	2	3	4	hello
0	5	6	7	8	world
1	9	10	11	12	python
b11 = pd.read_csv('ex2.csv',header=1)   # 设置第二行为列名,第一行的数据不会显示
b11
	5	6	7	8	world
0	9	10	11	12	python

使用header=None

b2 = pd.read_csv('ex2.csv',header=None)   # 另外自动给出行列名
b2
    0	1	2	3	4
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	python
1.6 names(指定列名)

参数names : 可以指定列名

b3 = pd.read_csv('ex2.csv',names=['a','b','c','d','e'])
b3
	a	b	c	d	e
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	python
1.7 index_col

参数index_col : 用作行索引的列编号或列名。可以是单个名称/数字或由多个名称/数字组成的列表(层次化索引)

index_col可以指定某一列作为行索引,例如下面代码指定ex2.csv文件的e列作为行索引:

b4 = pd.read_csv('ex2.csv',names=['a','b','c','d','e'],index_col='e') # 指定ex2.csv文件的第e列作为行索引
b4
	   a	b	c	d
e				
hello	1	2	3	4
world	5	6	7	8
python	9	10	11	12
c1 = pd.read_csv('csv_mindex.csv')
c1
    key1	key2	value1	value2
0	one	    a		1		2
1	one		b		3		4
2	one		c		5		6
3	one		d		7		8
4	two		a		9		10
5	two		b		11		12
6	two		c		13		14
7	two		d		15		16

index_col如果指定多个列名组成的列表会构成层次化索引

c2 = pd.read_csv('csv_mindex.csv',index_col=['key1','key2'])
c2
				value1	value2
key1	key2		
one		a		1		2
		b		3		4
		c		5		6
		d		7		8
two		a		9		10
		b		11		12
		c		13		14
		d		15		16
1.8 读取txt文件

ex3.txt文档内容如下:
在这里插入图片描述

open()读取

list(open('ex3.txt'))
['           A         B         C\n',
 'aaa -0.264438 -1.026059 -0.619500\n',
 'bbb  0.927272  0.302904 -0.032399\n',
 'ccc -0.264273 -0.386314 -0.217601\n',
 'ddd -0.871858 -0.348382  1.100491']

使用read_table()读取

d1 = pd.read_table('ex3.txt')
d1
							A B C
0	aaa -0.264438 -1.026059 -0.619500
1	bbb 0.927272 0.302904 -0.032399
2	ccc -0.264273 -0.386314 -0.217601
3	ddd -0.871858 -0.348382 1.100491

使用分隔符

\s 表示空白字符,包括但不限于空格、回车(\r)、换行(\n)、tab或者叫水平制表符(\t)等

+ 是重复修饰符,表示它前面与它紧邻的表达式格式相匹配的字符串至少出现一个,上不封顶

\s+ 意思就是至少有一个空白字符存在

d2 = pd.read_table('ex3.txt',sep='\s+') 
d2
		A			B			C
aaa	-0.264438	-1.026059	-0.619500
bbb	0.927272	0.302904	-0.032399
ccc	-0.264273	-0.386314	-0.217601
ddd	-0.871858	-0.348382	1.100491
2.分块读取

主要是应用在数据量很大的文件

tr = pd.read_csv('agg_match_stats_1.csv')   #读取整个文件到内存中,如果文件很大会很慢
tr.head(10)   # 从内存存储的整个文件中取出10行

在这里插入图片描述

分块读取

2.1 chunksize

通过参数chunksize每次读取文件的指定行(不重复)到内存中,可加快读取速度。

通过参数chunksize 可指定文件块的大小,可用于迭代。

f1 = pd.read_csv('agg_match_stats_1.csv',chunksize=10)   #每次读取文件的10行(不重复)到内存中
f1   # 可迭代对象TextFileReader
<pandas.io.parsers.TextFileReader at 0x11c02ef4520>

get_chunk() 不加参数默认读取10行,可指定

f1.get_chunk(6) 

第一次运行结果

在这里插入图片描述

第二次运行结果:从第一次结果往后迭代

在这里插入图片描述

查看get_chunk()得到的数据的数据类型,为DataFrame

print(type(f1.get_chunk())) 
<class 'pandas.core.frame.DataFrame'>
2.2 iterator

iterator: 逐块读取文件,可加快读取速度。

f2 = pd.read_csv('agg_match_stats_1.csv',iterator=True) 
f2  # 可迭代对象TextFileReader 
<pandas.io.parsers.TextFileReader at 0x11c02f20700>
f2.get_chunk(5)  #每次获取5行,不加参数默认读取整个文件

第一次运行结果
在这里插入图片描述

第二次运行结果:和chunksize的一样,从第一次往后迭代
在这里插入图片描述

3.将一个文件内容写到另一个文件
e1 = pd.read_csv('ex1.csv')
e1

ex1.csv文件如下:

abcdmessage
1234hello
5678world
9101112python
    a	b	c	d	message
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	python

csv文件名.to_csv("csv文件名") :将一个文件内容写到另一个文件.
例如下面把ex1.csv文件的内容写入一个新的csv文件中。会在当前目录生成一个out1.csv的文件,内容是ex1.csv的内容(如上),但比原ex1.csv存储的文件内容多了行索引值(0,1,2)

e1.to_csv('out1.csv')  

out1.csv文件内容如下:

abcdmessage
01234hello
15678world
29101112python
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值