您当前的位置:首页 > 互联网百科 > 大数据

了解这几种技巧,你的大数据处理程序性能至少提高几倍

时间:2020-08-10 17:08:56  来源:  作者:

本篇针对Python语言的数据分析库(pandas),分享了5个可以提升数据处理效率的解决方案,总结来说就是,不用不知道,一用真高效!符合真香定律···

针对不同情况下的nan值定位

涉及到数据的清洗,那么nan值必然是一个需要处理的问题,不论是直接舍弃还是填充值,总是需要先定位nan值在哪里,再根据数据特点去做相应的操作。这里我分享下我个人对定位nan值问题一些好的实践


详看以下代码,主要包含三种情况的定位

import pandas as pd
import numpy as np

df = pd.DataFrame({"name": [i for i in list("abcde")], "age": [i for i in range(10, 15)], "female": ["f", np.nan, "m", np.nan, "m"]})

# 数据呈现是这个样子
name    age    female
a       10      f
b       11      NaN
c       12      f
d       13      m
e       14      NaN

第一个方法:df.isnull().any()

通过结果可以看的出来,这个语句返回的是所有列是否含有nan值的布尔值

对于一个大数据文件来讲,你想一瞬间知道哪些字段有nan值需要处理,那么这个命令就可以让你瞬间看到结果,再针对结果做处理即可

# 结果展示 :显示只有female列有nan值存在
name      False
age       False
female     True
dtype: bool

第二个方法:df["female"].isnull()

结果如下,返回的是每个值是否为nan值的布尔值

第一个方法已经确定了哪些列有nan值,那么接下来你可能想知道的是这些字段中哪些值是nan值,那么这个方法就可以帮你定位

0    False
1     True
2    False
3     True
4    False
Name: female, dtype: bool

第三个方法:df[df.isnull().values==True]

结果如下:返回的是数据表中含有nan值的所有行

还有个写法很推荐, df[df.列名.isnull().values==True]因为有些列的nan值没有什么实际作用,也不用处理,那么有些列则必须不能有nan值,那么就可以通过这个命令专门针对某一列进行nan值的定位

这个命令是我用的最多的,因为在大数据文件中,如果nan值非常少,那么这种方法的定位非常有有效率且直接

# 	结果展示 :返回所有存在nan值
name	age	female
1	b	11	NaN
3	d	13	NaN

把每个人的爱好汇总


有的时候你会面临一种情况:你需要把某一列的值根据一定的分组要求分类聚合到一起,然后统一进行一系列的运算,需求如下所示

# 构建案例数据
import pandas as pd
df = pd.DataFrame({"name": ["小明", "小明", "小明", "小明", "小明", "小明", "小红", "小红", "小红", "小红", "小红"],
                  "爱好": ["篮球", "足球", "乒乓球", "唱歌", "跳舞", "跳绳", "喝酒", "抽烟", "烫头", "蹦迪", "瑜伽"]})

# 数据呈现如下
	name	爱好
0	小明	篮球
1	小明	足球
2	小明	乒乓球
3	小明	唱歌
4	小明	跳舞
5	小明	跳绳
6	小红	喝酒
7	小红	抽烟
8	小红	烫头
9	小红	蹦迪
10	小红	瑜伽

需求结果要如下所示

# 我们发现需求简单来说 就是将小明和小红的爱好汇总到一起
        name	爱好
0	小明	篮球,足球,乒乓球,唱歌,跳舞,跳绳
1	小红	喝酒,抽烟,烫头,蹦迪,瑜伽

想要实现这个效果,代码如下

# 先分组,然后将分组内容聚合(这里是以“,”连接)
new_df = df.groupby(["name"])["爱好"].Apply(lambda x: x.str.cat(sep=",")).reset_index()

一波反向操作

有时候在筛选数据集的时候条件很复杂,但是这些复杂的对立条件却只有一个,这种情况下就可以通过对立条件筛选反集,筛选所需要的数据,一般来讲,涉及到"isin"的时候有可能用的到


import numpy as np
import pandas as pd

df = pd.DataFrame({"省": ["辽宁", "辽宁", "辽宁", "四川", "四川", "四川", "四川", "山东", "山东"], "市": ["沈阳", "大连", "盘锦", "成都", "资阳", "绵阳","乐山", "青岛", "菏泽"]})

# 数据呈现如下
	省	市
0	辽宁	沈阳
1	辽宁	大连
2	辽宁	盘锦
3	四川	成都
4	四川	资阳
5	四川	绵阳
6	四川	乐山
7	山东	青岛
8	山东	菏泽

需求描述为:要呈现除了沈阳之外的数据

#实现代码如下, 这种就可以直接取反集,直接将沈阳的排除
df = df[~(df.市 == "沈阳")]

# 结果呈现如下
 	省	市
1	辽宁	大连
2	辽宁	盘锦
3	四川	成都
4	四川	资阳
5	四川	绵阳
6	四川	乐山
7	山东	青岛
8	山东	菏泽

将每个人的技能拆分成序列展示

有时候我们会面对这种需求:一个字段中保存的是带有固定分隔符的字符串(比如", "),需要将这一行的这个字段拆分,拆分为一个数据集,这个数据集每一行都显示这个原有字段的一个值


这么说有点绕口,看图

# 基础数据
import pandas as pd
df = pd.DataFrame({"name": ["小明", "小红", "小陈", "小白", "小王"], "技能": ["篮球,排球,羽毛球", "乒乓球,篮球,排球", "网球,唱歌,跳舞", "b-box,篮球,足球", "网球,乒乓球,羽毛球"]})

# 构造数据如下所示                                           
	name	技能
0	小明	篮球,排球,羽毛球
1	小红	乒乓球,篮球,排球
2	小陈	网球,唱歌,跳舞                         
3	小白	b-box,篮球,足球
4	小王	网球,乒乓球,羽毛球

需求为:需要把技能相同的人汇总一起,那么首先第一步肯定是要将每个人技能拆开,再去做聚合操作,那么拆开的结果应该是如下图所示的

# 将小明的技能分开展示,小红,小陈也是如此
name	技能-分开
0	小明	篮球
0	小明	排球
0	小明	羽毛球
1	小红	乒乓球
1	小红	篮球
1	小红	排球
2	小陈	网球
2	小陈	唱歌
2	小陈	跳舞
3	小白	b-box
3	小白	篮球
3	小白	足球
4	小王	网球
4	小王	乒乓球
4	小王	羽毛球

实现代码

# 用到了拼接和转置的操作
df=df.drop('技能', axis=1).join(df['技能'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('技能-分开'))

只关注各省份TOP2的记录

需求描述:我想将数据根据一定的要求分类并排序,然后取每个分组后排序的前两条记录

举例来说就是,如下

import numpy as np
import pandas as pd

df = pd.DataFrame({"省": ["辽宁", "辽宁", "辽宁", "四川", "四川", "四川", "四川", "山东", "山东"], "市": ["沈阳", "大连", "盘锦", "成都", "资阳", "绵阳","乐山", "青岛", "菏泽"]})

# 根据数据集大小将某列生成随机模拟数
df["篮球场个数"] = np.random.randint(1000000, 5000000, size=len(df))

# 数据如下所示
	省	市	篮球场个数
0	辽宁	沈阳	4697737
1	辽宁	大连	3550960
2	辽宁	盘锦	3154660
3	四川	成都	1174838
4	四川	资阳	4409197
5	四川	绵阳	2188212
6	四川	乐山	1609722
7	山东	青岛	3724735
8	山东	菏泽	2102416

需求为:展示每个省篮球场个数最多的前两个市,展示如下

# 每个省市只展示前两名的数据集	
省	市	篮球场个数
0	辽宁	沈阳	4697737
1	辽宁	大连	3550960
3	四川	成都	1174838
4	四川	资阳	4409197
7	山东	青岛	3724735
8	山东	菏泽	2102416

之前我计算这个,要用for循环迭代去取值,后面了解到了这个方法,效率提升了几倍,怎么写,如下所示

# 先排名,根据省市和篮球场个数,要加上inplace=True, 不然没有更改原表的顺序
df.sort_values(by=["省", "篮球场个数"], ascending=False, inplace=True)
print(df)

# 根据省份分组,并取每个组的前两条记录,则为排名前两名的记录,一定要用变量接受结果
tmp_df = df.groupby(by=["省"]).head(2)


Tags:大数据处理   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
大数据的生命周期分为数据获取(data acquisition)、数据存储(data storage)、数据分析(data analysis)以及结果(result),并且将前述大数据处理的三代技术中相关的工具映射至数据获取、数据存储和数据分析三个环节来进行分类讨...【详细内容】
2020-09-08  Tags: 大数据处理  点击:(112)  评论:(0)  加入收藏
本篇针对Python语言的数据分析库(pandas),分享了5个可以提升数据处理效率的解决方案,总结来说就是,不用不知道,一用真高效!符合真香定律···针对不同情况下...【详细内容】
2020-08-10  Tags: 大数据处理  点击:(52)  评论:(0)  加入收藏
导读:Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态计算。可部署在各种集群环境,对各种大小的数据规模进行快速计算。滴滴基于 Apac...【详细内容】
2020-05-04  Tags: 大数据处理  点击:(84)  评论:(0)  加入收藏
典型互联网大数据平台架构首先我们来看一个典型的互联网大数据平台的架构,如下图所示: 在这张架构图中,大数据平台里面向用户的在线业务处理组件用褐色标示出来,这部分是属于互...【详细内容】
2019-10-10  Tags: 大数据处理  点击:(318)  评论:(0)  加入收藏
在数据存储层,还有很多类似的系统和某些系统的变种,这里,仅仅列出较为出名的几个。 一、数据存储层宽泛地讲,据对一致性(consistency)要求的强弱不同,分布式数据存储策略,可分为AC...【详细内容】
2019-05-15  Tags: 大数据处理  点击:(191)  评论:(0)  加入收藏
▌简易百科推荐
张欣安科瑞电气股份有限公司 上海嘉定 201801 摘要:随着电力行业各系统接入,海量数据涌现,如何利用电网信息化中大量数据,对客户需求进行判断分析,服务于营销链条,提升企业市场竞...【详细内容】
2021-12-14  安科瑞张欣    Tags:大数据   点击:(9)  评论:(0)  加入收藏
1、什么是数据分析结合分析工具,运用数据分析思维,分析庞杂数据信息,为业务赋能。 2、数据分析师工作的核心流程:(1)界定问题:明确具体问题是什么;●what 发生了什么(是什么)●why 为...【详细内容】
2021-12-01  逆风北极光    Tags:大数据   点击:(25)  评论:(0)  加入收藏
在实际工作中,我们经常需要整理各个业务部门发来的数据。不仅分散,而且数据量大、格式多。单是从不同地方汇总整理这些原始数据就花了大量的时间,更不用说还要把有效的数据收集...【详细内容】
2021-11-30  百数    Tags:数据   点击:(21)  评论:(0)  加入收藏
数据作为新的生产要素,其蕴含的价值日益凸显,而安全问题却愈发突出。密码技术,是实现数据安全最经济、最有效、最可靠的手段,对数据进行加密,并结合有效的密钥保护手段,可在开放环...【详细内容】
2021-11-26  炼石网络    Tags:数据存储   点击:(17)  评论:(0)  加入收藏
导读:网易大数据平台的底层数据查询引擎,选用了Impala作为OLAP查询引擎,不但支撑了网易大数据的交互式查询与自助分析,还为外部客户提供了商业化的产品与服务。今天将为大家分享...【详细内容】
2021-11-26  DataFunTalk    Tags:大数据   点击:(15)  评论:(0)  加入收藏
导读:数据挖掘是一种发现知识的手段。数据挖掘要求数据分析师通过合理的方法,从数据中获取与挖掘项目相关的知识。作者:赵仁乾 田建中 叶本华 常国珍来源:华章科技数据挖掘是一...【详细内容】
2021-11-23  华章科技  今日头条  Tags:数据挖掘   点击:(20)  评论:(0)  加入收藏
今天再给大家分享一个不错的可视化大屏分析平台模板DataColour。 data-colour 可视化分析平台采用前后端分离模式,后端架构设计采用微服务架构模式。 前端技术:Angularjs、Jq...【详细内容】
2021-11-04  web前端进阶    Tags:DashboardClient   点击:(39)  评论:(0)  加入收藏
在Kubernetes已经成了事实上的容器编排标准之下,微服务的部署变得非常容易。但随着微服务规模的扩大,服务治理带来的挑战也会越来越大。在这样的背景下出现了服务可观测性(obs...【详细内容】
2021-11-02  大数据推荐杂谈    Tags:Prometheus   点击:(40)  评论:(0)  加入收藏
同一产品对老客户的要价竟然比新客户要高?这是当下“大数据杀熟”的直接结果。近年来,随着平台经济的蓬勃发展,大数据在为用户服务之外,也引发了多种不合理现象。为了有效遏制“...【详细内容】
2021-10-29    海外网   Tags:大数据   点击:(31)  评论:(0)  加入收藏
本人03年开始从事贸易行业,多年来一直致力于外贸获客和跨境电商选品等领域,最近有些小伙伴反馈海关数据演示的都挺好为啥用起来不是那么回事?大家看到数据时关注的有产品、采购...【详细内容】
2021-10-28  QD云龙    Tags:数据   点击:(33)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条