首頁  >  文章  >  後端開發  >  Python進行資料擷取

Python進行資料擷取

高洛峰
高洛峰原創
2017-02-25 10:38:462476瀏覽

資料擷取是分析師日常工作中經常遇到的需求。如某個用戶的貸款金額,某個月或季度的利息總收入,某個特定時段的貸款金額和筆數,大於5000元的貸款數量等等。本篇文章介紹如何透過python依特定的維度或條件對資料進行擷取,完成資料擷取需求。

準備工作

首先是準備工作,導入需要使用的函式庫,讀取並建立資料表取名為loandata 。

import numpy as np
import pandas as pd
loandata=pd.DataFrame(pd.read_excel('loan_data.xlsx'))

Python進行資料擷取

#設定索引欄位

在開始擷取資料前,先將member_id列設定為索引欄位。然後開始提取數據。

Loandata = loandata.set_index('member_id')

Python進行資料擷取

#按行擷取訊息

##按行擷取資訊

##第一步是按行提取數據,例如提取某個用戶的資訊。下面使用ix函數對Python進行資料擷取member_id

為1303503的使用者資訊進行了擷取。

loandata.ix[1303503]

#按列擷取資訊

Python進行資料擷取

#第二步是按列提取數據,例如提取用戶工作年限列的所有信息,以下是具體的代碼和提取結果,顯示了所有用戶的工作年齡資訊。

loandata.ix[:,'emp_length']

#以行與列提取資訊

第三步是按行和列提取信息,把前面兩部的查詢條件放在一起,查詢特定用戶的特定信息,下面是查詢Python進行資料擷取member_id

為1303503的用戶的

emp_length
訊息。

loandata.ix[1303503,'emp_length']

Python進行資料擷取

在前面的基礎上繼續增加條件,增加一行同時查詢兩個特定用戶的貸款金額資訊。具體程式碼和查詢結果如下。結果中分別列出了兩位使用者的代碼金額。

loandata.ix[[1303503,1298717],'loan_amnt']

Python進行資料擷取#在前面的程式碼後面增加

sum

函數,對結果進行求和,同樣是查詢兩個特定用戶的貸款進行,下面的結果中直接給出了貸款金額的總和值。

loandata.ix[[1303503,1298717],'loan_amnt'].sum()

Python進行資料擷取

#除了增加行的查詢條件以外,還可以增加列的查詢條件,下面的程式碼中查詢了一個特定用戶的貸款金額和年收入情況,結果中分別顯示了這兩個欄位的結果。

loandata.ix[1303503,['loan_amnt','annual_inc']]

Python進行資料擷取多個列的查詢也可以進行求和計算,在前面的程式碼後面增加
sum

函數,對這個用戶的貸款金額和年收入兩個欄位求和,並顯示出結果。

loandata.ix[1303503,['loan_amnt','annual_inc']].sum()


##########提取特定日期的資訊##### ##########資料擷取中還有一種很常見的需求就是按日期維度對資料進行匯總和提取,如按月,季度的匯總資料提取和按特定時間段的資料提取等等。 ######

设置索引字段

首先将索引字段改为数据表中的日期字段,这里将issue_d设置为数据表的索引字段。按日期进行查询和数据提取。

loandata = loandata.set_index('issue_d')

Python進行資料擷取

按日期提取信息

下面的代码查询了所有2016年的数据。

loandata['2016']

Python進行資料擷取

在前面代码的基础上增加月份,查询所有2016年3月的数据。

loandata['2016-03']

Python進行資料擷取

继续在前面代码的基础上增加日期,查询所有2016年6月16日的数据。

loandata['2016-06-16']


Python進行資料擷取

除了按单独日期查询以外,还可以按日期段进行数据查询,下面的代码中查询了所有2016年1月至5月的数据。下面显示了具体的查询结果,可以发现数据的日期都是在1-5月的,但是按日期维度显示的,这就需要我们对数据按月进行汇总。

loandata['2016-01':'2016-05']

Python進行資料擷取

按日期汇总信息

Pandas中的resample函数可以完成日期的聚合工作,包括按小时维度,日期维度,月维度,季度及年的维度等等。下面我们分别说明。首先是按周的维度对前面数据表的数据进行求和。下面的代码中W表示聚合方式是按周,how表示数据的计算方式,默认是计算平均值,这里设置为sum,进行求和计算。

loandata.resample('W',how=sum).head(10)

Python進行資料擷取

将W改为M,数据变成了按月聚合的方式。计算方式依然是求和。这里需要说明的是resample函数会显示出所有连续的时间段,例如前面按周的聚合操作会显示连续的周日期,这里的按月操作则会在结果中显示连续的月,如果某个时间段没有数据,会以NaN值显示。

loandata.resample('M',how=sum)

Python進行資料擷取

将前面代码中的M改为Q,则为按季度对数据进行聚合,计算方式依然为求和。从下面的数据表中看,日期显示的都是每个季度的最后一天,如果希望以每个季度的第一天显示,可以改为QS。

loandata.resample('Q',how=sum)

Python進行資料擷取

将前面代码中的Q改为A,就是按年对数据进行聚合,计算方式依然为求和。

loandata.resample('A',how=sum)

Python進行資料擷取

前面的方法都是对整个数据表进行聚合和求和操作,如果只需要对某一个字段的值进行聚合和求和,可以在数据表后增加列的名称。下面是将贷款金额字段按月聚合后求和,并用0填充空值。

loandata['loan_amnt'].resample('M',how=sum).fillna(0)

Python進行資料擷取

在前面代码的基础上再增加一个数值字段,并且在后面的计算方式中增加len用来计数。在下面的结果中分别对贷款金额和利息收入按月聚合,并进行求和和计数计算

loandata[['loan_amnt','total_rec_int']].resample('M',how=[len,sum])

Python進行資料擷取

有时我们需要只对某一时间段的数据进行聚合和计算,下面的代码中对2016年1月至5月的数据按月进行了聚合,并计算求和。用0填充空值。

loandata['2016-01':'2016-05'].resample('M',how=sum).fillna(0)

Python進行資料擷取

或者只对某些符合条件的数据进行聚合和计算。下面的代码中对于贷款金额大于5000的按月进行聚合,并计算求和。空值以0进行填充。

loandata[loandata['loan_amnt']>5000].resample('M',how=sum).fillna(0)

Python進行資料擷取

除了按周,月,季度和年以外,resample函数还可以按以下方式对日期进行聚合。

下面给出了具体的对应表和说明。

 Python進行資料擷取

更多Python進行資料擷取相关文章请关注PHP中文网!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn