在pandas中输入和输出主要有以下几种形式:文件读取,文件存储,从数据库载入文件,对网络资源进行交互(Web API)。
1. 文本格式数据读取
1.1 基本使用
1.1.1 读取文本文件到dataframe
将表格型数据读取为DataFrame是pandas的特性,主要使用的方法是 read_csv和read_table。read_csv的默认分隔符是逗号,read_table的默认分隔符是'\t'。这2个方法有很多参数可以使用,下面列举常用的。
sep参数可以指定文件的分割符,header=None不指定列名(实际上是使用默认的),按照顺序方式0,1,2,...排号。也可以通过names参数指定列名,并且利用index_col参数指定索引列名(这时候,索引的列名需要在names中也出现,如果不指定index_col会使用默认的0,1,2,...作为序号列)。
import pandas as pd
frame1 = pd.read_table('files/pandas_import_001.txt',sep='\t',header=None)
# print(frame1)
frame2 = pd.read_table('files/pandas_import_001.txt'
,names=['唯一id','记录数'],index_col='唯一id')
print(frame2)
1.1.2 使用多层索引
如果数据中有多层索引,在将数据载入dataframe后,在显示上会自动合并高层的索引内容。例如下图:
多层索引,直接使用一个字符串列表展示即可。
frame3 = pd.read_table('files/pandas_input_002.txt'
,names=['row_key','city','rec_type','lng','lat'],
index_col=['city','rec_type'])
print(frame3)
1.1.3 使用正则表达式作为分隔符
当文件的分隔符不规则时,可以使用正则表达式来进行分割列,例如下边文件使用1个或者多个空格来分割列,使用sep='\s+'来分割列。 同时,如果不想要文件中的某些行,也可以使用参数skiprows=[1,4,6]类似这样来筛选掉不想要的行。
frame4 = pd.read_table('files/pandas_import_003.txt',sep='\s+'
,names=['rowkey','c1','c2','c3'],skiprows=1)
print(frame4)
处理NULL值是实际使用中常见的场景,在文件中可以使用NA来表示NULL值,可以使用dataframe的isnull()方法来获取dataframe中的空值情况.
可以使用na_values=参数来指定null值的显示值:
frame5 = pd.read_table('files/pandas_import_003.txt',sep='\s+'
,names=['rowkey','c1','c2','c3'],skiprows=1,na_values='BBC')
print(frame5)
1.2 分块读入文本文件
在读入大文件到内存时,可以指定n_rows来只读入部分行数据。同时,可以使用chunksize参数来返回一个TextParser对象(pandas.io.parsers.TextFileReader object),并可以遍历该对象。
# 分块读取数据, chunksize , nrows,
frame6 = pd.read_table('files/pandas_import_001.txt',skiprows= 1,nrows=100)
# print(frame6)
# frame7=pd.read_table('files/pandas_import_001.txt',skiprows= 1,names = ['poi_id','times'])
# print(frame7)
chunker = pd.read_table('files/pandas_import_001.txt',skiprows= 1
,names = ['poi_id','times'],chunksize=1000)
1.3 将数据写入文本格式
之前将文本读入内存,同样也可以将内存中的数据写入到文件中。使用Dataframe的to_csv方法来保存文件。
frame2.to_csv('files/pandas_input_002.txt',sep=',')
网友评论