当前位置:首页 > 数码 > 让你的Pandas代码快得离谱的两个技巧 (让你的盘带出神入化)

让你的Pandas代码快得离谱的两个技巧 (让你的盘带出神入化)

admin5个月前 (04-15)数码32

假设你曾经经常使用过Pandas处置表格数据,你或者会相熟导入数据、荡涤和转换的环节,而后将其用作模型的输入。但是,当你须要裁减和将代码投入消费时,你的Pandas管道很或者开局解体并运转缓慢。在这篇文章中,笔者将分享2个技巧,协助你让Pandas代码快得离谱,优化数据处置效率并防止经常出现的圈套。

技巧1:矢量化操作

在Pandas中,矢量化操作是一种弱小的工具,它可以用一种更繁复和高效的方式处置整个数据框的列,而不是逐行循环。

它是如何上班的?

广播是矢量化操作的一个关键要素,它准许您直观地操作具备不同状态的对象。

eg1:具备3个元素的数组a与标量b相乘,失掉与Source状态相反的数组。

eg2:在启动加法运算时,将状态为(4,1)的数组a与状态为(3,)的数组b相加,结果会失掉一个状态为(4,3)的数组。

关于这一点曾经有很多文章,并且在深度学习中,大规模的矩阵乘法是十分经常出现的。在本文中,咱们将应用两个冗长的例子上启动讨论。

首先,假定您想要计算给定整数在列中产生的次数。以下是2种或者的方法。

"""计算DataFrameX中"column_1"列中等于指标值target的元素个数。参数:X:>defoffset_loop(X,days:int)->pd.DataFrame:d=pd.Timedelta(days=days)X["column_const"]=[x+dforxinX["column_10"]]returnXdefoffset_vectorized(X,days:int)->pd.DataFrame:X["column_const"]=X["column_10"]+pd.Timedelta(days=days)returnX

技巧2:迭代

「for循环」

第一个也是最直观的迭代方法是经常使用/target=_blankclass=infotextkey>Pythonfor循环。

defloop(df:pd.DataFrame,remove_col:str,s_to_remove_col:str)->list[str]:res=[]i_remove_col=df.columns.get_loc(remove_col)i_words_to_remove_col=df.columns.get_loc(words_to_remove_col)fori_rowinrange(df.shape[0]):res.end(remove_words(df.iat[i_row,i_remove_col],df.iat[i_row,i_words_to_remove_col]))returnresult
defapply(df:pd.DataFrame,remove_col:str,words_to_remove_col:str)->list[str]:returndf.apply(func=lambdax:remove_words(x[remove_col],x[words_to_remove_col]),axis=1).tolist()

在df.apply的每次迭代中,提供的可调用函数失掉一个Series,其索引为df.columns,其值是行的。这象征着pandas必需在每个循环中生成该序列,这是低廉的。为了降落老本,最好对您知道将经常使用的df子集调用apply,如下所示:

defapply_only_used_cols(df:pd.DataFrame,remove_col:str,words_to_remove_col:str)->list[str]:returndf[[remove_col,words_to_remove_col]].apply(func=lambdax:remove_words(x[remove_col],x[words_to_remove_col]),axis=1)

「列表组合+itertuples」

经常使用itertuples与列表相联合启动迭代必需会更好。itertuples生成带有行数据的(命名)元组。

defitertuples_only_used_cols(df:pd.DataFrame,remove_col:str,words_to_remove_col:str)->list[str]:return[remove_words(x[0],x[1])forxindf[[remove_col,words_to_remove_col]].itertuples(index=False,name=None)]

「列表组合+zip」

zip接受可迭代对象并生成元组,其中第i个元组按顺序包括一切给定可迭代对象的第i个元素。

defzip_only_used_cols(df:pd.DataFrame,remove_col:str,words_to_remove_col:str)->list[str]:return[remove_words(x,y)forx,yinzip(df[remove_col],df[words_to_remove_col])]

「列表组合+to_dict」

defto_dict_only_used_columns(df:pd.DataFrame)->list[str]:return[remove_words(row[remove_col],row[words_to_remove_col])forrowindf[[remove_col,words_to_remove_col]].to_dict(orient="records")]

「缓存」

除了咱们讨论的迭代技术之外,另外两种方法可以协助提高代码的性能:缓存和并行化。假设经常使用相反的参数屡次调用pandas函数,缓存会特意有用。例如,假设remove_words运行于具备许多重复值的数据集,您可以经常使用它functools.lru_cache来存储函数的结果并防止每次都从新计算它们。要经常使用lru_cache,只有将@lru_cache装璜器减少到的申明中remove_words,而后经常使用您首选的迭代方法将该函数运行于您的数据集。这可以显着提高代码的速度和效率。以上方的代码为例:

@lru_cachedefremove_words(...):...#Sameimplementationasbeforedefzip_only_used_cols_cached(df:pd.DataFrame,remove_col:str,words_to_remove_col:str)->list[str]:return[remove_words(x,y)forx,yinzip(df[remove_col],df[words_to_remove_col])]

减少此装璜器会生成一个函数,该函数会记住之前遇到的输入的输入,从而无需再次运转一切代码。

「并行化」

最后一张王牌是经常使用pandarallel跨多个独立的df块并行化咱们的函数调用。该工具易于经常使用:您只有导入并初始化它,而后将一切.applys更改为.parallel_applys。

frompandarallelimportpandarallelpandarallel.initialize(nb_workers=min(os.cpu_count(),12))defparapply_only_used_cols(df:pd.DataFrame,remove_col:str,words_to_remove_col:str)->list[str]:returndf[[remove_col,words_to_remove_col]].parallel_apply(lambdax:remove_words(x[remove_col],x[words_to_remove_col]),axis=1)

Python 编程,open data with Pandas,open data在那条URL链接中,详细在图里,求代码,急用

getData函数补充的部分如下(见图,注意图中源代码的缩进)

测试时要这样调用getData(),才会出结果.

### Your code

({unit:unit_x},axis=columns,inplace=True)

({unit:unit_y},axis=columns,inplace=True)

dt=(dfTemp,dfRain,how=outer,sort=True)

new_columns=[place,unit_y,max,main,value,unit_x]

dt=(columns=new_columns)

({place:},axis=columns,inplace=True)

({unit_x:unit},axis=columns,inplace=True)

({unit_y:unit},axis=columns,inplace=True)

[:, 0] = (lambda s: (()()))([:, 0])

dt=_string(index = False)

新手关于python中pandas函数的使用

Pandas

利用Python的pandas数据结构来读取excel表格的数据,部分代码如下:#-*- coding:utf-8 -*-import pandas as pdimport as pltcatering_data=catering_=_excel(catering_data,index_col=u日期)#读取数据,指定日期列为索引列大多数书上都是这样写的,但是在Python2.7上运行时出现错误。 (没有在Python3.x版本试过)出现了如下问题:这里写图片描述使用help(_excel)发现参数中有必选参数sheetname,加入到函数中,代码如下:#-*- coding:utf-8 -*-import pandas as pdimport as pltcatering_data=catering_=_excel(catering_data,sheetname=0,index_col=u日期)运行成功。 sheetname=0 的意思是:读取xls文件中的第一个表格。 (假设文件中有很多个表格)另外,也可以将文件转换成csv格式,就不需要这个参数了。 代码如下:catering_data=catering_=_csv(catering_data)

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Pandas

“让你的Pandas代码快得离谱的两个技巧 (让你的盘带出神入化)” 的相关文章

从数据处理到机器学习-Pandas-的强大魅力 (从数据处理到人工智能)

从数据处理到机器学习-Pandas-的强大魅力 (从数据处理到人工智能)

简介 Pandas是一个强大的Python库,专门用于数据处理和分析。它提供了直观的数据结构,简化了复杂的数据处理任务。 核心数据结构 Pandas的两个核心数据结构是: Series...

Pandas-数据处理与分析的得力助手

Pandas-数据处理与分析的得力助手

1. 数据合并与连接 Pandas可以用于合并和连接多个数据集,常见的方法包括concat、merge和join等。 1.1 使用concat合并 impo...

释放数据价值的强大工具-b-b-Pandas时间重采样 (释放数据价值的有效途径是)

释放数据价值的强大工具-b-b-Pandas时间重采样 (释放数据价值的有效途径是)

简介 时间序列数据蕴含着巨大的价值,通过重采样技术可以提升原始数据的表现形式。无论你是数据科学家、分析师,还是对数据挖掘感兴趣,都可以从本文学习方法和工具,提升数据可视化技巧。 为什么...

Python-数据标准化详解-Pandas数据预处理 (python怎么读)

Python-数据标准化详解-Pandas数据预处理 (python怎么读)

1. 数据准备 ```python import pandas as pd df = pd.read_csv('datasets/dpc-covid19-ita-regioni.csv') d...