范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Pandas中高效的选择和替换操作总结

  作为数据科学家,使用正确的工具和技术来最大限度地利用数据是很重要的。Pandas是数据操作、分析和可视化的重要工具,有效地使用Pandas可能具有挑战性,从使用向量化操作到利用内置函数,这些最佳实践可以帮助数据科学家使用Pandas快速准确地分析和可视化数据。
  在本文中,我们将重点介绍在DataFrame上经常执行的两个最常见的任务,特别是在数据科学项目的数据操作阶段。这两项任务是有效地选择特定的和随机的行和列,以及使用replace()函数使用列表和字典替换一个或多个值。
  在本文中,我们将使用下面的数据集:扑克牌游戏数据集婴儿名字数据集
  我们使用的第一个数据集是扑克牌游戏数据集,如下所示。poker_data = pd.read_csv("poker_hand.csv") poker_data.head()
  在每个回合中,每个玩家手里有五张牌,每一张牌都有花色:红心、方块、梅花或黑桃,以及它的数字,范围从1到13。该数据集由一个人可以拥有的五张卡片的每一种可能组合组成。
  Sn:第n张牌的符号,其中:1(红心),2(方块),3(梅花),4(黑桃)
  Rn:第n张牌的排名,其中:1(王牌),2-10,11(J),12(Q),13(K)
  第二个数据集是流行的婴儿名字数据集,其中包括2011年至2016年间最流行的新生儿名字:names = pd.read_csv("Popular_Baby_Names.csv") names.head()
  该数据集还包括按年份、性别和种族划分的美国最受欢迎的名字。例如,2011年,Chloe 这个名字在所有亚裔和太平洋岛民女性新生儿中排名第二。
  下面我们开始进入正题为什么需要高效的代码?
  高效代码是指执行速度更快、计算容量更低的代码。在本文中,我们将使用time()函数来测量计算时间,我们通过在执行前和执行后获取时间,然后计算其差值获得代码的执行时间。下面是一个简单的例子:import time # record time before execution start_time = time.time() # execute operation result = 5 + 2 # record time after execution end_time = time.time() print("Result calculated in {} sec".format(end_time - start_time))
  让我们看一个提高代码运行时间并降低计算时间复杂度的示例:我们将计算每个数字的平方,从0到100万。首先,我们将使用列表推导式来执行此操作,然后使用for循环重复相同的过程。
  首先使用列表推导式:#using List comprehension  list_comp_start_time = time.time() result = [i*i for i in range(0,1000000)] list_comp_end_time = time.time() print("Time using the list_comprehension: {} sec".format(list_comp_end_time - list_comp_start_time))
  使用for循环来执行相同的操作:# Using For loop for_loop_start_time= time.time() result=[] for i in range(0,1000000): result.append(i*i) for_loop_end_time= time.time() print("Time using the for loop: {} sec".format(for_loop_end_time - for_loop_start_time))
  可以看到它们之间有很大的差异,我们可以用百分比来计算它们之间的差异:list_comp_time = list_comp_end_time - list_comp_start_time for_loop_time = for_loop_end_time - for_loop_start_time print("Difference in time: {} %".format((for_loop_time - list_comp_time)/ list_comp_time*100))
  可以看到仅仅使用了不同的方法,但是在执行效率方面有了很大的不同。使用.iloc[]和.loc[]选择行和列
  这里我们将介绍如何使用.iloc[] & .loc[] pandas函数从数据中高效地定位和选择行。我们将使用iloc[]作为索引号定位器,使用loc[]作为索引名定位器。
  在下面的例子中,我们选择扑克数据集的前500行。首先使用.loc[]函数,然后使用.iloc[]函数。rows = range(0, 500) # Time selecting rows using .loc[] loc_start_time = time.time() poker_data.loc[rows] loc_end_time = time.time() print("Time using .loc[] : {} sec".format(loc_end_time - loc_start_time))
  rows = range(0, 500) # Time selecting rows using .iloc[] iloc_start_time = time.time() poker_data.iloc[rows] iloc_end_time = time.time() print("Time using .iloc[]: {} sec".format(iloc_end_time - iloc_start_time))
  loc_comp_time = loc_end_time - loc_start_time iloc_comp_time = iloc_end_time - iloc_start_time print("Difference in time: {} %".format((loc_comp_time - iloc_comp_time)/ iloc_comp_time*100))
  虽然这两个方法使用的方式是相同的,但iloc[]的执行速度比loc[]快近70%。这是因为.iloc[]函数利用了索引的顺序,索引已经排序因此速度更快。
  我们还可以使用它们来选择列,而不仅仅是行。在下一个示例中,我们将使用这两种方法选择前三列。iloc_start_time = time.time() poker_data.iloc[:,:3] iloc_end_time = time.time() print("Time using .iloc[]: {} sec".format(iloc_end_time - iloc_start_time))
  names_start_time = time.time() poker_data[["S1", "R1", "S2"]] names_end_time = time.time() print("Time using selection by name: {} sec".format(names_end_time - names_start_time))
  loc_comp_time = names_end_time - names_start_time iloc_comp_time = iloc_end_time - iloc_start_time print("Difference in time: {} %".format((loc_comp_time - iloc_comp_time)/ loc_comp_time*100))
  可以看到,使用.iloc[]进行列索引仍然要快80%。所以最好使用.iloc[],因为它更快,除非使用loc[]更容易按名称选择某些列。替换DF中的值
  替换DataFrame中的值是一项非常重要的任务,特别是在数据清理阶段。
  让我们来看看之前加载的婴儿名字数据集:
  首先看看性别列:names["Gender"].unique()
  我们可以看到,女性用大写和小写两个值表示。这在实际数据中非常常见,但是对于我们来说只需要一个统一的表示就可以了,所以我们需要将其中一个值替换为另一个值。这里有两种方法,第一种是简单地定义我们想要替换的值,然后我们想用什么替换它们。如下面的代码所示:start_time = time.time() names["Gender"].loc[names.Gender=="female"] = "FEMALE" end_time = time.time() pandas_time = end_time - start_time print("Replace values using .loc[]: {} sec".format(pandas_time))
  第二种方法是使用panda的内置函数.replace(),如下所示:start_time = time.time() names["Gender"].replace("female", "FEMALE", inplace=True) end_time = time.time() replace_time = end_time - start_time print("Time using replace(): {} sec".format(replace_time))
  可以看到,与使用.loc()方法查找值的行和列索引并替换它相比,内置函数的快了157%。print("The differnce: {} %".format((pandas_time- replace_time )/replace_time*100))
  我们还可以使用列表替换多个值。比如说将所有WHITE NON-HISPANIC或WHITE NON-HISP都改为WNH。这里我们使用.loc[]函数和" or "语句定位我们正在寻找的种族。然后进行替换赋值。start_time = time.time() names["Ethnicity"].loc[(names["Ethnicity"] == "WHITE NON HISPANIC") | (names["Ethnicity"] == "WHITE NON HISP")] = "WNH" end_time = time.time() pandas_time= end_time - start_time print("Results from the above operation calculated in %s seconds" %(pandas_time))
  或者使用pandas内置.replace() 函数执行相同的操作,如下所示:start_time = time.time() names["Ethnicity"].replace(["WHITE NON HISPANIC","WHITE NON HISP"], "WNH", inplace=True) end_time = time.time() replace_time = end_time - start_time print("Time using .replace(): {} sec".format(replace_time))
  我们可以再次看到,使用.replace()方法比使用.loc[]方法快得多。为了更好地直观地了解它有多快,让我们运行下面的代码:print("The differnce: {} %".format((pandas_time- replace_time )/replace_time*100))
  .replace()方法比使用.loc[]方法快87%。如果数据很大,需要大量的清理,它将有效的减少数据清理的计算时间,并使pandas代码更快。
  最后,我们还可以使用字典替换DataFrame中的单个值和多个值。如果想在一个命令中使用多个替换函数,这将是非常有用的。
  我们要用字典把每个男性的性别替换为BOY,把每个女性的性别替换为GIRL。names = pd.read_csv("Popular_Baby_Names.csv") start_time = time.time() names["Gender"].replace({"MALE":"BOY", "FEMALE":"GIRL", "female": "girl"}, inplace=True) end_time = time.time() dict_time = end_time - start_time print("Time using .replace() with dictionary: {} sec".format(dict_time))
  names = pd.read_csv("Popular_Baby_Names.csv") start_time = time.time() names["Gender"].replace("MALE", "BOY", inplace=True) names["Gender"].replace("FEMALE", "GIRL", inplace=True) names["Gender"].replace("female", "girl", inplace=True) end_time = time.time() list_time = end_time - start_time print("Time using multiple .replace(): {} sec".format(list_time))
  比较这两种方法,可以看到使用字典的运行速度快了大约22%。
  使用字典可以替换几个不同列上的相同值。我们想把所有种族分成三大类:黑人、亚洲人和白人。这里的代码也非常简单。使用嵌套字典:外键是我们要替换值的列名。值是另一个字典,其中的键是要替换的字典。start_time = time.time() names.replace({"Ethnicity": {"ASIAN AND PACI": "ASIAN", "ASIAN AND PACIFIC ISLANDER": "ASIAN", "BLACK NON HISPANIC": "BLACK", "BLACK NON HISP": "BLACK", "WHITE NON HISPANIC": "WHITE", "WHITE NON HISP": "WHITE"}}) print("Time using .replace() with dictionary: {} sec".format (time.time() - start_time))总结使用.iloc[]函数可以更快地选择行和列并且它比loc[]要快,但是loc[] 提供了一些更方便的功能,如果速度不是优先考虑或者iloc[]实现的比较麻烦的话,再考虑使用loc[]。使用内置的replace()函数比使用传统方法快得多。使用python字典替换多个值比使用列表更快。
  作者:Youssef Hosni

医疗公司跨界光伏?拟投资18亿账上资金只有2亿一家医疗信息化业务公司,宣布跨界光伏!麦迪科技2月10日晚公告,拟投资约18。62亿元建设年产9GW高效单晶电池智能工厂项目。项目计划总投资约18。62亿元,在绵阳市安州区建设集研企事录丨多家科技公司入局ChatGPT事件近日,由美国OpenAI公司研发的聊天机器人程序ChatGPT在世界范围内走红。继谷歌和微软陆续推出相似产品后,国内科技巨头也纷纷加入了对该领域的布局。最早,是百度公布设立了类酷狗子公司再诉羊了个羊公司侵权近日,记者从天眼查App了解到,羊了个羊关联公司北京简游科技有限公司上海芊柔生物科技有限公司新增1条开庭公告信息,案由为侵害录音录像制作者权纠纷,原告为酷狗音乐子公司广州繁星互娱信基金今天卖白酒是不是正确今天市场低开,全天就是震荡上扬的走势,上涨幅度主要是在上午形成的,下午是横盘震荡偏向于上,上证指数收盘于3284点。整个盘面上涨3409家,下跌1351家,涨停43家,跌停4家,涨超轻量级国产自主免费数据库建模工具EZDML简介EZDML是一款国产免费的轻量级数据建模工具,支持ChatGPT辅助设计,具有轻巧快速简便而功能强大的特点,可轻松地进行数据库表结构设计,建立界面数据模型,支持通过自定义脚本模板生乔丹和皮蓬详细数据对比,究竟谁才是老大,看完答案自然就有了近日美媒Fadeawayworld就根据实力评选出了排名历史前十的双人组,排在第一无疑是乔丹与皮蓬双人组,两人携手在芝加哥公牛队里作战了10个赛季,砍下了六个总冠军,并且有两次三连试驾长安智电iDD双车为插混市场提供了全新选择?随着新能源浪潮的持续推进,插混车型也是在近两年得到了极大的发展,除了比亚迪DMi外,吉利雷神奇瑞鲲鹏等陆续推出。而在动力市场一直名声大噪的长安自然也不甘落后,推出了自己混动品牌智电兴证全球合瑞混合自2月14日起暂停大额申购王鹤静中国证券报中证网中证网讯(记者王鹤静)2月13日,兴证全球基金发布公告称,为了保证基金的平稳运作,保护基金持有人利益,自2月14日起,公司有权拒绝接受兴证全球合瑞混合单个基金许昌市委副书记马正兰任河南能源董事长,曾长期在煤企任职据河南能源微信公众号消息,2023年2月11日,河南能源召开干部大会,宣布河南省委决定马正兰同志任河南能源党委书记董事长杨恒同志任河南能源总经理党委副书记副董事长,免去河南能源总工中航电测激战涨停板,2位游资大佬太猛了啊,力扛抛压狂买5。78亿1选股中航电测,炒作军工方向(国改),该公司公告称拟以8。39元股发行股份购买航空工业集团持有的航空工业成飞100股权,将新增航空武器装备整机及部附件研制生产业务并主要聚焦于航空主新能源车市加速分化头部SEV阵营迎来新玩家本报记者夏治斌石英婧上海报道1月新能源车企销量普遍下滑,市场加速分化,智能电动赛道从资格赛进入淘汰赛。但高端智能电动品牌阿维塔却于2月6日交出了一份亮眼的成绩单,旗下首款情感智能电
奥运冠军刘翔现状再婚后享受生活,带妻子周游世界文九月编辑九月刘翔身为我国著名的短跑运动员,曾获得过多个世界级赛事奖项。作为运动明星的他,一举一动都被受观众的关注。从奥运赛事到感情生活都是人们茶余饭后的谈资。近日39岁的刘翔在退古代为啥把女儿叫千金,把儿子叫犬子,其中典故不妨一看中国是礼仪之邦,礼仪文化历史悠久,博大精深,在五千年的历史长河中,中华民族形成了高尚的道德标准完整的礼仪规范和优秀的传统美德。自古以来中国人十分注重礼仪礼节,使用文明礼仪用语,问人韩红藏了23年的儿子现状曝光终身不嫁的她,背后隐情让人落泪12年前,韩红的歌曲天亮了风靡全国。歌曲中看到父母走了那么远,把我留在这个陌生的世界,带着浓浓的伤感,让无数人潸然泪下。但很多人不知道的是,这首歌源于一个真实的故事。故事中那个失去主持人杨帆娶青梅竹马的妻子,结婚十年生一女,一家三口甜如蜜主持人杨帆自从升级当爸以后,就经常在社交平台上发布自己与女儿的小视频。在视频里这对父女配合十分默契,看得出来他们的家庭氛围非常不错。相比于女儿的高调亮相,杨帆的妻子则显得要低调一些今天说两个事,ampampquot违约ampampquot城投债信托兑付了但又爆出另一个非吸一先分享违约的项目兑付了这个截图估计很多人都看了,有的朋友看后说这是集合信托城投债券产品首次违约,凸显信托风控感人也有人反驳说这不是违约,只是差额收益没及时给,跟信托项目和城投债本国企混改趋势国企挂靠要求国企资源整合国企混改是国家为国企制度改革,和加强民营企业做大做强而出台的政策,吸引优秀的外资企业,民营企业加入到国企行业中。在国企央企混改的大趋势下,很多民营企业也借着这一趋势,选择让国企入股又见大跌,贵州茅台跌破了1500贵州茅台股票跌破1500块,作为天朝王国大A股股王的贵州茅台,已经连续崩了不知道多少天,最近几天更是一举跌破了1500块,事出有因吗?不知道。目前在这种没有任何利空消息的情况下,贵南充出让8宗地块,总成交金额超3。5亿在9月30日,顺庆区拟出让8宗地块,面积合计379。093亩。这些地块分别位于共兴镇李家芦溪镇和华凤街道江家坝村,主要涉及居住商业道路建设等用途。10月21日,这8宗地块全部顺利出美国衰退警报出现!加息是否会放缓?3个月期和10年期美债收益率曲线周三(26日)出现倒挂现象,这是联准会最关注的事情发生了,最准衰退警钟铃声大响。短期美债收益利率超过长期美债收益率,这种情况称为美债收益率曲线倒挂。连贷款资格都没有,纠结利息有啥用?日常工作中,经常会有人问我当下各大银行贷款产品的利息。借款人关心利息无可厚非,但是大家可能不知道的是,影响贷款利率的决定性因素是个人资质。正所谓多大的脚穿多大的鞋,贷款也是一样的道李在镕正式就任三星电子会长,韩媒称三星正式开启李在镕时代极目新闻记者孙喆据韩联社10月27日报道,李在镕正式就任三星电子会长,此前已担任10年副会长。相关报道截图(图片来源韩联社)报道称,三星电子27日召开理事会,表决通过了李在镕接任会