python小白社區默言_e0a2同學,是一個持之以恆的好同學。以下是他的作品。
pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數,其中常用read_csv和read_table讀取文件。
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)