当前位置: 首页 > 科技观察

你听说过这些让人迟到的高效编码技巧吗?

时间:2023-03-21 19:21:21 科技观察

本文转载自公众号《读书芯》(ID:AI_Discovery)。事实上,Python是目前公认的最通用的编程语言。凭借其简单易懂、易操作的优势,囊括了每一位职场人士和大学生必备的技能清单。学习Python确实可以帮助你高效地工作。但学会它是一回事,知道它又是另一回事。不是每个学过Python的人都能把它玩好。以下提示将使您离精通Python更近一步。将不常用的类别合并到一列中有时会导致元素分布不均匀,稀有类别就存在。通常希望将这些类别合并为一个类别。df.artists.value_counts()将把Coldplay和Weekend归为一类,因为它们对数据集的影响可以忽略不计。怎么做?首先,找到你不想改变的元素,比如Eminem、TaylorSwift和BrunoMars:myList=df.artists.value_counts().nlargest(3).index使用where()函数替换其他元素dfdf_new=df.where(df.artists.isin(myList),other='otherartists')df_new.artists.value_counts()这是根据需要修改的更新列。查找列表的新元素给定两个不同的列表,当你想在一个列表中找到一个元素但不在另一个列表中时,请参考这两个列表:A=[1,3,5,7,9]B=[4,5,6,7,8]为了在列表A中找到新元素,我们取列表A和列表B的集合差:set(A)-set(B)值1、3、9只出现在列表A没有出现在列表B中。摆脱警告当您运行代码时,您经常会收到很多警告。没过多久就开始烦人了。例如,每当您导入一个王朝时,您可能会收到一条警告(FutureWarning)信息。您可以使用以下代码隐藏所有警告。确保它写在代码的顶部。importwarningwarnings.filterwarnings(action='ignore')importkeras这将有助于隐藏整个代码中的所有警告。map()函数map()函数接受函数(function)和序列(iterable)两个参数,返回一个包含结果的map:map(func,itr)func指的是一个函数,它接收传入的给定序列的元素从地图。itr指的是可以映射的序列。defproduct(n1,n2):returnn1*n2list1=(1,2,3,4)list2=(10,20,30,40)result=map(product,list1,list2)list(result)开始解码。Product函数接受两个列表并返回两个列表的乘积。清单1和清单2是两个充当映射函数序列的列表。map()整合乘积函数和序列→列表1和列表2,返回两个列表的乘积作为结果。Map+Lambda组合可以使用lambda表达式修改上面的代码来替换乘积函数:list1=(1,2,3,4)list2=(10,20,30,40)result=map(lambdax,y:x*y,list1,list2)print(list(result))Lambda表达式有助于降低单独编写函数的成本。开始、停止和设置切片(start:stop[:step])是通常包含一系列部分的对象。如果仅提供停止,则生成从索引0开始直到停止的部分序列。如果仅提供start,则在索引开始到最后一个元素之后生成部分序列。如果同时提供了start和stop,则在索引start到stop之后生成部分序列。如果提供了所有的开始、停止和步骤,则在索引开始到停止后生成部分序列,并递增索引步长。x=[1,2,3,4,5,6,7,8]x[1:6:2]上面的代码中,1是开始索引,6是停止索引,2是步骤索引.这意味着从索引1开始到索引6停止,步长为2。您还可以使用[::-1]操作翻转列表:x[::-1]没错,很容易翻转整个列出开始、停止和步进操作。Zip和Enumerate的结合zip和enumerate函数经常用在for循环中,将两者结合使用更令人兴奋。它不仅可以在单个循环中迭代多个值,而且还可以同时获取索引。NAME=['Sid','John','David']BIRD=['Eagle','Sparrow','Vulture']CITY=['Mumbai','US','London']fori,(name,bird,city)inenumerate(zip(NAME,BIRD,CITY)):print(i,'represents',name,',',bird,'and',city)Zip函数可以将所有列表合并为一个列表,这样在同时访问每个列表,Enumerate函数协助获取索引和追加到该索引的元素。随机抽样有时会遇到非常大的数据集,决定处理数据的随机子集。pandas数据框的sample函数可以实现更多的功能。让我们看一下上面创建的歌手数据模型。df.sample(n=10)这有助于在数据集中获得10个随机行。df.sample(frac=0.5).reset_index(drop=True)对上面的代码进行分解,frac参数取0到1之间的值,包括1。它占用分配给它的一部分数据流。0.5在上面的代码片段中指定,因此它将返回大小为→0.5*的随机子集,如您在上面的reset_index函数中所见。它有助于适当地重新排列索引,因为在获取随机子集时,索引也会重新排列。保留内存随着您对编程的深入了解,您将意识到记住内存高效代码的重要性。生成器是返回我们可以迭代的对象的函数。这有助于有效地使用内存,因此它主要用于迭代无限长的序列。defSampleGenerator(n):yieldnnn=n+1yieldnnn=n+1yieldngen=SampleGenerator(1)Yield语句暂停函数,保存其所有状态,并在随后的连续调用中继续执行。print(next(gen))print(next(gen))print(next(gen))可以看到,yield保存了之前的状态,每次我们调用next函数时,都会一直持续到下一次return的yield它的新输出。可以通过在生成器函数内添加无限运行的while循环来迭代单个yield。defupdatedGenerator(n):while(1):yieldnnn=n+1a=updatedGenerator(1)foriinrange(5):print(next(a))While语句可以重复迭代相同的yield语句。救世主Skiprows压轴登场!读取的csv文件太大,导致内存不够?Skiprows可以轻松解决它。图源:unsplash可以指定数据框中需要跳过的行数。假设有一个100万行的数据集,它不适合你的记忆。如果赋值skiprows=0.5million(跳过50万行),读取数据集时会跳过50万行,这样就可以轻松读取数据集的一个子集。df=pd.read_csv('artist.csv')df_new=pd.read_csv('artist.csv',skiprows=50)df.shape,df_new.shape在上面的代码片段中,df表示包含112行的数据集。添加skiprows=50(跳过50行)后,它跳过数据集中的50行,从而读取62行作为新数据集。案子破了!这就是大大提高编码效率的秘诀。