pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,其中常用read_csv和read_table读取文件。

python 提高dataframe读取速度的方法_分隔符

python 提高dataframe读取速度的方法_正则表达式_02

python 提高dataframe读取速度的方法_Python_03

python 提高dataframe读取速度的方法_分隔符_04

python 提高dataframe读取速度的方法_分隔符_05

python 提高dataframe读取速度的方法_Python_06

python 提高dataframe读取速度的方法_python pandas读取txt文件_07

python 提高dataframe读取速度的方法_正则表达式_08

python 提高dataframe读取速度的方法_分隔符_09

python 提高dataframe读取速度的方法_Python_10

python 提高dataframe读取速度的方法_正则表达式_11

python 提高dataframe读取速度的方法_正则表达式_12

python 提高dataframe读取速度的方法_Python_13

0.png下面出现的例子中需要读取的文件都存放在我自己的电脑 D:Pytho\notebookpydata-book-masterch06 中。使用read_csv读入csv文件:

1.png使用read_table读入csv文件:

2.png如果读取一个文件没有标题行,可以使用header参数自动分配标题行:

3.png或者使用names参数指定需要的列表头:

4.png还可以使用index_col参数指定DataFrame的索引(也就是修改行表头):

5.png有些表格可能使用空白符或者字符串去分隔字段,这时可以使用正则表达式作为read_table分隔符:

6.png缺失值处理缺失数据经常是要么没有(空字符串),要么用某个标记值表示。源文件:

7-0.png默认情况下,pandas会用NaN进行标记:

7.png可以用一个字典为各列指定不同的NA标记值:

8.png逐块读取文本文件在处理很大的文件时,我们可能只需读取文件很小的一部分。如果只想读取几行文件,可以通过nrows参数进行指定即可:

9.png

10.png要逐块读取文件,需要设置chunksize(行数)参数:

11.pngread_csv返回的一个TextParser对象可以根据chunksize对文件进行逐块迭代。如下面的例子,将值计数聚合到“key”列中:

12.png结果为:

13.png源代码为:

# coding: utf-8# # 使用pandas读取文本文件# In[1]:import numpy as npfrom pandas import Series,DataFrameimport pandas as pd# ### 方法一:使用read_csv读入csv文件# In[2]:df = pd.read_csv('D:\Python\notebook\pydata-book-master\ch06\ex1.csv')print(df)# ### 方法二:使用read_table读入csv文件# In[3]:# 不指定分隔符的情况df2 = pd.read_table('D:\Python\notebook\pydata-book-master\ch06\ex1.csv')print(df2)# In[4]:# 使用参数sep指定分隔符情况df3 = pd.read_table('D:\Python\notebook\pydata-book-master\ch06\ex1.csv',sep=',')print(df3)# In[5]:'''如果读取的文件没有列表头,使用header参数自动分配列表头'''df_ex2 = pd.read_csv('D:\Python\notebook\pydata-book-master\ch06\ex2.csv')print(df_ex2)# In[6]:# 自动分配表头df_ex2 = pd.read_csv('D:\Python\notebook\pydata-book-master\ch06\ex2.csv',header=None)print(df_ex2)# In[7]:# 使用names参数指定列表头df_ex2_name = pd.read_csv('D:\Python\notebook\pydata-book-master\ch06\ex2.csv',names=['一','二','三','四','message'])print(df_ex2_name)# In[8]:# 使用index_col参数指定DataFrame的索引(行表头)names=['一','二','三','四','message']df_ex2_DF= pd.read_csv('D:\Python\notebook\pydata-book-master\ch06\ex2.csv',names=names,index_col='message')print(df_ex2_DF)# ### 使用正则表达式作为read_table分隔符# In[9]:list(open('D:\Python\notebook\pydata-book-master\ch06\ex3.txt'))# In[10]:# 使用正则表达式s+处理空白符分隔result = pd.read_table('D:\Python\notebook\pydata-book-master\ch06\ex3.txt',sep='s+')print(result)# ### 缺失值处理# In[11]:# 默认使用NaN填充缺失值df_na = pd.read_csv('D:\Python\notebook\pydata-book-master\ch06\ex5.csv')print(df_na)# In[12]:# 使用isnull转为布尔值来标记NA值pd.isnull(df_na)# In[13]:print(df_na)# 使用一个字典把各列指定值转为NA值new_na = {'message':['foo'],'c':[11],'something':['two']}new_na_values = pd.read_csv('D:\Python\notebook\pydata-book-master\ch06\ex5.csv',na_values=new_na)print(\n new_na_values\n',new_na_values)# ### 逐块读取文本文件# In[14]:# 读取一个10000行5列的.csv文件all_Csv = pd.read_csv('D:\Python\notebook\pydata-book-master\ch06\ex6.csv')print(all_Csv)# In[15]:# 只读取5行文件part_Csv = pd.read_csv('D:\Python\notebook\pydata-book-master\ch06\ex6.csv',nrows=5)print(part_Csv)# In[16]:# 根据chunksize对文件进行逐块迭代chunker = pd.read_csv('D:\Python\notebook\pydata-book-master\ch06\ex6.csv',chunksize=1000)print(chunker)# In[17]:# 统计 key 这一列中各个值出现的次数tot = Series([])for piece in chunker: tot = tot.add(piece['key'].value_counts(),fill_value=0) #print(tot) # 对结果进行降序排序new_tot = tot.sort_values(ascending=False)print(new_tot)# In[18]:# 选取前10行的结果显示df_tot = new_tot[:10]print(df_tot)