今天呢就給大家分享一個數據分析裡面的基礎內容之pandas數據讀取
數據讀取是進行數據預處理,建模與分析的前提,不同的數據源,需要使用不同的函數讀取,pandas內置了10餘種數據源讀取函數和對應的數據寫入函數,常見的數據源有3種,分別是資料庫數據,文本文件(包含一般文本文件和CSV文件)和Excel文件,掌握這三種數據源讀取方法,便能夠完成80%左右的數據讀取工作。下面我們具體瞅瞅;
讀/寫資料庫數據
在生產環境中,絕大多數的數據都存儲在資料庫中,pandas提供了讀取與存儲關係型資料庫數據的函數和方法,除pandas庫外,還需要使用SQLAlchemy庫建立對應的資料庫連接,SQLAlchemy配合相應資料庫的python連接工具(如,mysql資料庫需要安裝mysqlclient或者pymysql庫,Oracle資料庫需要安裝cx_oracle庫),使用create_engine函數建立一個資料庫連接,pandas支持mysql,postgtrsql,Oracle,Sql server和SQLite等主流資料庫,下面將以mysql資料庫為例,介紹pandas資料庫數據得到讀取與存儲。
資料庫數據讀取
pandas實現資料庫數據讀取有三個函數,read_sql,read_sql_table和read_sql_query,read_sql_table只能讀取資料庫的某一個表格,不能實現查詢的操作,read_sql_query則只能實現查詢操作,不能直接讀取資料庫中的某個表,read_sql是倆者的結合,既能夠讀取資料庫中的某一個表,也能夠實現查詢操作。
三個函數的語法如下
#導入相關的包from sqlalchemy import create_engineimport pandas as pdpd.read_sql_table(table_name,con, schema=None, index_col=None, coerce_float=True, parse_dates=None,columns=None, chunksize=None)pd.read_sql_query(sql, con, index_col=None,coerce_float=True, params=None, parse_dates=None,chunksize=None)pd.read_sql(sql, con, index_col=None, coerce_float=True,params=None, parse_dates=None, columns=None, chunksize=None)SQLAlchemy連接資料庫的代碼如下:
from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:1234@127.0.0.1:3306/testdb?charset=utf8')print(engine)在create_engine中輸入的是一個連接字符串,在使用python的sqlAlchemy時,mysql和oracle資料庫連接字符串的格式如下:
資料庫產品名+連接工具名://用戶名:密碼@資料庫ip地址:資料庫埠號/資料庫名稱?charset=資料庫數據編碼
上述三種函數參數及其重要參數說明
sql or table_name
接受string,表示讀取的數據的表名或者sql語句無默認
con
接受資料庫連接,表示資料庫連接信息,無默認
index_col
接受int,sequence或者False,表示設定的列作為行名,如果是一個數列,則是多重索引,默認為None
coerce_float
接受boolean,將資料庫中的decimal類型的數據轉換為pandas中的float64類型的數據,默認為True
columns
接受int,表示讀數據的列明,默認為None
使用read_sql_table,read_sql_query,read_sql函數讀取資料庫數據;
from sqlalchemy import create_engineimport pandas as pdengine =create_engine('mysql+pymysql://root:Huawei12#$@192.168.1.45:3306/example?charset=utf8')print(engine)#列印結果如下#Engine(mysql+pymysql:#使用read_sql_query查看example中的數據表數目formlist =pd.read_sql_query('show tables',con=engine)print('example資料庫中的表清單為:\n',formlist)
#使用read_sql_table讀取訂單詳情表atail1 = pd.read_sql_table('meal_order_detail1',con=engine)print('使用read_sql_table讀取訂單表的長度為:',len(datail1))
#使用read_sql讀取訂單詳情表detail2 = pd.read_sql('select * frommeal_order_detail2',con=engine)print('使用read_sql函數+SQL語句讀取的訂單詳情表長度為:',len(detail2))detail3 =pd.read_sql('meal_order_detail3',con=engine)print('使用read_sql函數+表格名稱讀取的訂單詳情表的長度為:',len(detail3))
資料庫數據存儲
將DataFrame寫入資料庫中,同樣也要依賴SQLALchemy庫的create_engine函數創建資料庫連接,資料庫數據讀取有3個函數,但數據存儲則只有一個to_sql方法,用例如下:
df.to_sql(name,con,schema=None,if_exists='fail',index=True,index_label=None,dtype=None)to_sql方法常用參數及說明
name
接收string,代表資料庫表明,無默認
con
接收資料庫連接,無默認
if_exists
接收fail,replace和append,fail表示如果表名存在,則不執行寫入操作,replace表示如果存在,則將原資料庫表刪除,在重新創建,append則表示在原數據表的基礎上追加數據,默認為fail
index
接收boolean,表示是否將行索引作為數據傳入資料庫,默認為True
index_label
接收string或者sequence,代表是否引用所用名稱,如果index參數為True,此參數為None,則使用默認名稱,如果為多重索引,則必須使用sequence形式,默認為None
dtype
接收dict,代表寫入的數據類型(列明為key,數據格式為values),默認為None
使用to_sql方法寫入數據
orderDatadatail1.to_sql('test1',con=engine,index=False,if_exists='replace')formlist1= pd.read_sql_query('show tables',con=engine)print('新增一個表格後,example資料庫表清單為:\n',formlist1)
讀寫文本文件
文本文件是一種由若干行字符構成的計算機文件,他是一種典型的順序文件,CSV是一種用分隔符分割的文件格式,因為其分隔符不一定是逗號,因此又稱為字符分隔文件,文件以純文本形式存儲表格數據,他是一種通用,相對簡單的文件格式,最廣泛的應用是在程序之間轉義表格數據,而這些程序本身是在不兼容的格式上進行操作的,因為大量程序都支持CSV或者其變體,因此可以作為大多數程序的輸入和輸出格式。
文本文件讀取
pandas提供了read_table來讀取文本文件,提供了read_csv函數來讀取CSV文件,二者語法如下:
read_table和read_csv常用參數及其說明
參數名稱
說明
filepath
接受string,代表文件路徑,無默認
sep
接受string,代表分隔符,read_csv默認為「,」,read_table默認為制表符「tab」
header
接受int或sequence表示將某行數據作為列明,默認為誒infer,表示自動識別
names
接受aray,表示列明,默認為None
index_col
接受int,sequence或False,表示索引列的位置,取值為sequence則代表多重索引,默認為None
dtype
接收dict,代表寫入的數據類型(列明為key,數據格式為values),默認為None
engine
接受c或者python,代表數據解析引擎,默認為c
nrows
接受int,表示讀取前n行,默認為None
使用read_table和read_csv函數讀取菜品訂單信息表
#使用read_table讀取菜品訂單信息表# order = pd.read_table('../Python數據分析與應用/第4章/任務程序/data/meal_order_info.csv',sep=',',encoding='gbk')#len(order)
在讀取過程中,有時候你會遇到這種報錯,莫得荒,我也不知道為啥,但是我們可以通過讀取文件的方式讀取文本,如下:
f=open('../meal_order_info.csv')order=pd.read_table(f,sep=',',encoding='utf-8')len(order)order1 = pd.read_csv('../meal_order_info.csv',encoding='utf-8',engine='python')len(order1)更改參數讀取表的訂單信息
f=open('../meal_order_info.csv')order2=pd.read_table(f,sep=';',encoding='utf-8')order3 = pd.read_csv('../meal_order_info.csv',encoding='gbk',header=None,engine='python')len(order3)
文本文件存儲
文本文件的存儲和讀取類似,對於結構化數據,可以通過pandas中的to_csv函數實現,常用參數與語法如下:
to_csv(path_or_buf=None, sep=',', na_rep='',float_format=None, columns=None, header=True, index=True, index_label=None,mode='w', encoding=None, compression=None, quoting=None, quotechar='"',line_terminator='\n', chunksize=None, tupleize_cols=None, date_format=None,doublequote=True, escapechar=None, decimal='.')to_csv函數的常用參數及其說明
參數名稱
說明
path_or_buf
接受string,代表文件路徑,無默認
sep
接受string,代表分隔符,默認為逗號
na_rep
接受string,代表缺失值,默認為「」
columns
接受list,代表寫出的列名,默認為「」
header
接受boolean,代表是否將列明寫出,默認為True
index
接受布爾,代表是否將行名(索引)寫出,默認為True
index_label
接受sequence。代表索引名,默認為None
mode
接受特定的string,代表數據寫入模式,默認為w
encoding
代表文件的編碼格式
使用to_csv函數將數據寫入CSV文件中
#將order以csv格式存儲order.to_csv('../tmp/orderInfo.csv',sep=';',index=False)os.listdir('../tmp')
讀寫Excel文件
Excel是微軟公司的辦公軟體Microsoft office的組件之一,他可以對數據進行處理,統計分析等操作,廣泛的應用與管理,財經和金融等眾多領域。
Excel文件讀取
pandas提供了read_excel函數來讀取"xls",「xlsx」倆種excel文件,其語法如下:
pd.read_excel(io, sheet_name=0, header=0, names=None,index_col=None, usecols=None, squeeze=False, dtype=None, engine=None,converters=None, true_values=None, false_values=None, skiprows=None,nrows=None, na_values=None, parse_dates=False, date_parser=None,thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)read_excel該函數常用參數及其說明
參數名稱
說明
io
接收string,表示文件路徑,無默認
sheetname
接收string,int,代表Execl表內數據的分表位置,默認為0
header
接受int或sequence,表示將某行數據作為列明,取值為int的時候,代表將列作為列名,取值為sequence,則代表多重索引,默認為infer,表示自動識別
names
接受array,表示列明,默認為None
index_col
接受int,sequence或者false,表示索引列的位置,取值sequence嗲表多重索引,默認為None
dtype
接受dict,代表寫入的數據類型
使用read_excel函數讀取菜品訂單信息表
user = pd.read_excel('../users.xlsx')len(user)userExcel文件存儲
將文件存儲為Excel文件,可以使用to_excel函數,其語法格式如下:
to_excel(excel_writer, sheet_name='Sheet1', na_rep='',float_format=None, columns=None, header=True, index=True, index_label=None,startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None,inf_rep='inf', verbose=True, freeze_panes=None)使用to_execl函數將數據存儲為Excel文件user.to_excel('../tmp/userInfo.xlsx',sheet_name='Sheet3')os.listdir('../tmp')
嗯,這就是我們常用到的pandas讀取文件的一些操作,貌似沒什麼難的,孰能生巧就可,下篇文章為大家分享pandas的常用操作,祝大家一臂之力登上數據分析的神壇。
哦,對啦,該篇文章的素材直接來源為網絡《python數據分析》