- pandas 笔记009
- 九、Pandas文件操作
- 1.读
- 1.1 read_csv()
- 1.2 read_table()
- 1.3 sep或delimiter(分隔符)
- 1.4 skiprows(忽略跳过行数)
- 1.5 header(设置列名)
- 1.6 names(指定列名)
- 1.7 index_col
- 1.8 读取txt文件
- 2.分块读取
- 2.1 chunksize
- 2.2 iterator
- 3.将一个文件内容写到另一个文件
import numpy as np import pandas as pd1.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 python1.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,python1.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 python1.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 python1.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 python1.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 python1.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 161.8 读取txt文件
ex3.txt文档内容如下:
open()读取
list(open('ex3.txt'))
[' A B Cn', 'aaa -0.264438 -1.026059 -0.619500n', 'bbb 0.927272 0.302904 -0.032399n', 'ccc -0.264273 -0.386314 -0.217601n', '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.1004912.分块读取
主要是应用在数据量很大的文件
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
get_chunk() 不加参数默认读取10行,可指定
f1.get_chunk(6)
第一次运行结果
第二次运行结果:从第一次结果往后迭代
查看get_chunk()得到的数据的数据类型,为Dataframe
print(type(f1.get_chunk()))
2.2 iterator
iterator: 逐块读取文件,可加快读取速度。
f2 = pd.read_csv('agg_match_stats_1.csv',iterator=True)
f2 # 可迭代对象TextFileReader
f2.get_chunk(5) #每次获取5行,不加参数默认读取整个文件
第一次运行结果
第二次运行结果:和chunksize的一样,从第一次往后迭代
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 |



