資料擷取是分析師日常工作中經常遇到的需求。如某個用戶的貸款金額,某個月或季度的利息總收入,某個特定時段的貸款金額和筆數,大於5000元的貸款數量等等。本篇文章介紹如何透過python依特定的維度或條件對資料進行擷取,完成資料擷取需求。
準備工作
首先是準備工作,導入需要使用的函式庫,讀取並建立資料表取名為loandata 。
import numpy as np import pandas as pd loandata=pd.DataFrame(pd.read_excel('loan_data.xlsx'))
#設定索引欄位
在開始擷取資料前,先將member_id
列設定為索引欄位。然後開始提取數據。
Loandata = loandata.set_index('member_id')
#按行擷取訊息
##按行擷取資訊
##第一步是按行提取數據,例如提取某個用戶的資訊。下面使用ix函數對member_id
為1303503的使用者資訊進行了擷取。loandata.ix[1303503]
#第二步是按列提取數據,例如提取用戶工作年限列的所有信息,以下是具體的代碼和提取結果,顯示了所有用戶的工作年齡資訊。
loandata.ix[:,'emp_length']
第三步是按行和列提取信息,把前面兩部的查詢條件放在一起,查詢特定用戶的特定信息,下面是查詢member_id
為1303503的用戶的emp_length
訊息。
loandata.ix[1303503,'emp_length']
在前面的基礎上繼續增加條件,增加一行同時查詢兩個特定用戶的貸款金額資訊。具體程式碼和查詢結果如下。結果中分別列出了兩位使用者的代碼金額。
loandata.ix[[1303503,1298717],'loan_amnt']
#在前面的程式碼後面增加
sum函數,對結果進行求和,同樣是查詢兩個特定用戶的貸款進行,下面的結果中直接給出了貸款金額的總和值。
loandata.ix[[1303503,1298717],'loan_amnt'].sum()
#除了增加行的查詢條件以外,還可以增加列的查詢條件,下面的程式碼中查詢了一個特定用戶的貸款金額和年收入情況,結果中分別顯示了這兩個欄位的結果。
loandata.ix[1303503,['loan_amnt','annual_inc']]
多個列的查詢也可以進行求和計算,在前面的程式碼後面增加
sum
loandata.ix[1303503,['loan_amnt','annual_inc']].sum()
设置索引字段
首先将索引字段改为数据表中的日期字段,这里将issue_d设置为数据表的索引字段。按日期进行查询和数据提取。
loandata = loandata.set_index('issue_d')
按日期提取信息
下面的代码查询了所有2016年的数据。
loandata['2016']
在前面代码的基础上增加月份,查询所有2016年3月的数据。
loandata['2016-03']
继续在前面代码的基础上增加日期,查询所有2016年6月16日的数据。
loandata['2016-06-16']
除了按单独日期查询以外,还可以按日期段进行数据查询,下面的代码中查询了所有2016年1月至5月的数据。下面显示了具体的查询结果,可以发现数据的日期都是在1-5月的,但是按日期维度显示的,这就需要我们对数据按月进行汇总。
loandata['2016-01':'2016-05']
按日期汇总信息
Pandas中的resample
函数可以完成日期的聚合工作,包括按小时维度,日期维度,月维度,季度及年的维度等等。下面我们分别说明。首先是按周的维度对前面数据表的数据进行求和。下面的代码中W表示聚合方式是按周,how表示数据的计算方式,默认是计算平均值,这里设置为sum
,进行求和计算。
loandata.resample('W',how=sum).head(10)
将W改为M,数据变成了按月聚合的方式。计算方式依然是求和。这里需要说明的是resample
函数会显示出所有连续的时间段,例如前面按周的聚合操作会显示连续的周日期,这里的按月操作则会在结果中显示连续的月,如果某个时间段没有数据,会以NaN值显示。
loandata.resample('M',how=sum)
将前面代码中的M改为Q,则为按季度对数据进行聚合,计算方式依然为求和。从下面的数据表中看,日期显示的都是每个季度的最后一天,如果希望以每个季度的第一天显示,可以改为QS。
loandata.resample('Q',how=sum)
将前面代码中的Q改为A,就是按年对数据进行聚合,计算方式依然为求和。
loandata.resample('A',how=sum)
前面的方法都是对整个数据表进行聚合和求和操作,如果只需要对某一个字段的值进行聚合和求和,可以在数据表后增加列的名称。下面是将贷款金额字段按月聚合后求和,并用0填充空值。
loandata['loan_amnt'].resample('M',how=sum).fillna(0)
在前面代码的基础上再增加一个数值字段,并且在后面的计算方式中增加len
用来计数。在下面的结果中分别对贷款金额和利息收入按月聚合,并进行求和和计数计算
loandata[['loan_amnt','total_rec_int']].resample('M',how=[len,sum])
有时我们需要只对某一时间段的数据进行聚合和计算,下面的代码中对2016年1月至5月的数据按月进行了聚合,并计算求和。用0填充空值。
loandata['2016-01':'2016-05'].resample('M',how=sum).fillna(0)
或者只对某些符合条件的数据进行聚合和计算。下面的代码中对于贷款金额大于5000的按月进行聚合,并计算求和。空值以0进行填充。
loandata[loandata['loan_amnt']>5000].resample('M',how=sum).fillna(0)
除了按周,月,季度和年以外,resample
函数还可以按以下方式对日期进行聚合。
下面给出了具体的对应表和说明。
更多Python進行資料擷取相关文章请关注PHP中文网!