pandas 笔记009
目录
九、Pandas文件操作
1.读
import numpy as np
import pandas as pd
1.1 read_csv()
ex1.csv文件打开如下:
a | b | c | d | message |
---|---|---|---|---|
1 | 2 | 3 | 4 | hello |
5 | 6 | 7 | 8 | world |
9 | 10 | 11 | 12 | python |
函数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如下:
1 | 2 | 3 | 4 | hello |
---|---|---|---|---|
5 | 6 | 7 | 8 | world |
9 | 10 | 11 | 12 | python |
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文件如下:
a | b | c | d | message |
---|---|---|---|---|
1 | 2 | 3 | 4 | hello |
5 | 6 | 7 | 8 | world |
9 | 10 | 11 | 12 | python |
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
文件内容如下:
a | b | c | d | message | |
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | hello |
1 | 5 | 6 | 7 | 8 | world |
2 | 9 | 10 | 11 | 12 | python |