【学习】Python进行数据提取的方法总结【转载】

摘要:
本文描述了如何使用python根据特定维度或条件提取数据,以完成数据提取需求。1贷款数据=贷款数据。set_索引按行提取信息的第一步是按行提取数据,例如,提取用户的信息。按日期查询和提取数据。在下面的代码中,W表示每周的聚合方法,how表示数据的计算方法。默认值是计算平均值。这里,它被设置为求和以计算和。空值用0填充。

链接:http://www.jb51.net/article/90946.htm

数据提取是分析师日常工作中经常遇到的需求。如某个用户的贷款金额,某个月或季度的利息总收入,某个特定时间段的贷款金额和笔数,大于5000元的贷款数量等等。本篇文章介绍如何通过python按特定的维度或条件对数据进行提取,完成数据提取需求。

DATA-EXTRACTION

准备工作

首先是准备工作,导入需要使用的库,读取并创建数据表取名为loandata。

1
2
3
importnumpy as np
importpandas as pd
loandata=pd.DataFrame(pd.read_excel('loan_data.xlsx'))

原始数据表

设置索引字段

在开始提取数据前,先将member_id列设置为索引字段。然后开始提取数据。

1
Loandata =loandata.set_index('member_id')

设置索引字段

按行提取信息
第一步是按行提取数据,例如提取某个用户的信息。下面使用ix函数对member_id为1303503的用户信息进行了提取。

1
loandata.ix[1303503]

提取行信息

按列提取信息

第二步是按列提取数据,例如提取用户工作年限列的所有信息,下面是具体的代码和提取结果,显示了所有用户的工作年龄信息。

1
loandata.ix[:,'emp_length']

提取列信息

按行与列提取信息

第三步是按行和列提取信息,把前面两部的查询条件放在一起,查询特定用户的特定信息,下面是查询member_id为1303503的用户的emp_length信息。

1
loandata.ix[1303503,'emp_length']

按行与列提取信息

在前面的基础上继续增加条件,增加一行同时查询两个特定用户的贷款金额信息。具体代码和查询结果如下。结果中分别列出了两个用户的代码金额。

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

按行与列提取信息1

在前面的代码后增加sum函数,对结果进行求和,同样是查询两个特定用户的贷款进行,下面的结果中直接给出了贷款金额的汇总值。

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

按行与列提取信息2

除了增加行的查询条件以外,还可以增加列的查询条件,下面的代码中查询了一个特定用户的贷款金额和年收入情况,结果中分别显示了这两个字段的结果。

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

按行与列提取信息3
多个列的查询也可以进行求和计算,在前面的代码后增加sum函数,对这个用户的贷款金额和年收入两个字段求和,并显示出结果。

1
loandata.ix[1303503,['loan_amnt','annual_inc']].sum()
按行与列提取信息4
提取特定日期的信息

数据提取中还有一种很常见的需求就是按日期维度对数据进行汇总和提取,如按月,季度的汇总数据提取和按特定时间段的数据提取等等。

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

1
loandata =loandata.set_index('issue_d')

设置日期索引字段

按日期提取信息
下面的代码查询了所有2016年的数据。

1
loandata['2016']

按年提取数据

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

1
loandata['2016-03']

按月提取数据

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

1
loandata['2016-06-16']

按日提取数据

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

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

按时间段提取数据

按日期汇总信息

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

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

按周汇总数据

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

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

按月汇总数据

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

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

按季度汇总数据

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

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

按年汇总数据

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

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

限定字段按月汇总

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

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

限定字段按月汇总金额笔数

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

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

按限定时间段按月汇总数据

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

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

增加筛选条件按月汇总

除了按周,月,季度和年以外,resample函数还可以按以下方式对日期进行聚合。下面给出了具体的对应表和说明。

日期聚合参数


Read more: http://bluewhale.cc/2016-08-22/data-extraction-using-python.html#ixzz4v7D7T3MH

原文链接:http://bluewhale.cc/2016-08-22/data-extraction-using-python.html

免责声明:文章转载自《【学习】Python进行数据提取的方法总结【转载】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ElasticSearch7.6.2 search_phase_execution_exceptionAndroid中对内存和外存的读写下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用logstash同步Mysql数据表到ES的一点感悟

针对单独一个数据表而言,大致可以分如下两种情况: 1.该数据表中有一个根据当前时间戳更新的字段,此时监控的是这个时间戳字段 具体可以看这个文章:https://www.cnblogs.com/sanduzxcvbnm/p/12858967.html 示例: modification_time就是表中要监控的时间戳字段 input { jdbc {...

SQL 03

********************2017年8月10日******************** 安装mysql Typical :典型安装Custom :自定义安装Complete:完全安装 简单认知mysql默认端口号是:3306mysql的超级用户叫:root 在cmd中启动mysql服务:net start mysql在cmd中登录mysq...

Android ORM——初识greenDAO 3及使用greenDAO 3前应该掌握的一些知识点(一)

引言 总所周知,SQLite——内嵌于Android中一个占用内存极小的关系型,作为我们Android存储领域中重要的一员 ,或多或少都曾接触到数据库。即使Android系统中提供了很多操作SQLite的API,可是在业务开发中还是须要手动去编写原生SQL语句,这不仅复杂、不好维护。更重要的是不高效,经常会由于SQL语句写错而添加了开发成本,于是便出现...

【架构】一、服务单元化

转载:https://mp.weixin.qq.com/s/jfbHvEMSZtgXis3AtSOZyw 一、为什么要做单元化 决策一个系统的整体架构方向,将对这个系统的未来产生深远影响,并且会有实际的技术改造方面的人力投入。这样的的决策必须是谨慎的,有依据的。所以,对于要不要单元化这个问题,这里最想告诉大家的是一个忠告:切勿神话单元化。 回顾支付宝的整个...

应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较

本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行比较。 领域实体为何不能一统江湖? 当你阅读我或其它博主提供的示例代码时,会发现几种类型的实体,这几种实体初步看上去区别不大,只是名称不同,特别在这些示例非常简单的情况下更是如此。你可能会疑惑为何要搞得...

维数灾难

Content 1 引言 2 维数灾难与过拟和 3 怎样避免维数灾难 4 总结  1 引言 本文章讨论的话题是“curse of dimension”,即维数灾难,并解释在分类它的重要性,在下面的章节我会对这个概念做一个直观的解释,并清晰的描述一个由维数灾难引起的过度拟合的问题。 下面不如正题,考虑我们有一堆猫和狗的图片,现在要做一个分类器,它可以把猫和狗...