数据科学家和软件工程师都使用的Pandas函数有哪些?您不可能记住所有内容,但您需要知道如何快速找到它们。能够快速的找到并使用函数,让我们在写代码的时候能够达到一定的流畅度。所以我创建了这个我每天用来构建Web应用程序和机器学习模型的函数备忘清单。它并不详尽,但包含我最常使用的函数、示例以及有关何时使用它们的有用见解。1.安装如果你想自己运行例子,从Kaggle下载动漫推荐数据集,解压并放在你的jupyternotebook同一个文件夹中。接下来运行这些指令应该会重复以下任何函数的结果。importpandasaspdimportnumpyasnpanime=pd.read_csv('anime-recommendations-database/anime.csv')rating=pd.read_csv('anime-recommendations-database/rating.csv')anime_modified=anime.set_index('name')2.输入inputCSV(逗号分隔值)将CSV直接转换为数据框。有时CSV加载数据还需要指定编码(即:encoding='ISO-8859–1')。如果数据框包含不可读的字符,则应首先尝试上述方法。对于电子表格文件,存在一个名为pd.read_excel的类似函数。anime=pd.read_csv('anime-recommendations-database/anime.csv')从输入数据构建数据框。这在手动实例化简单数据以查看它在运行时如何变化时很有用。df=pd.DataFrame([[1,'Bob','Builder'],[2,'Sally','Baker'],[3,'Scott','CandleStickMaker']],columns=['id','name','occupation'])df.head()如果您想在更改数据框的同时保留原始副本,则复制数据框很有用。很好的做法是在输入数据框后立即复制它。anime_copy=anime.copy(deep=True)3.ViewandcheckGetthetoporbottomnrecords显示数据框中的前n条记录。我通常会在笔记本的某处打印数据框的顶部记录,这样如果我忘记了其中的内容,我可以回过头来参考它。anime.head(3)rating.tail(1)计算行数这不是pandas函数本身,而是len()函数计算行数并将其保存到变量以供其他地方使用。len(df)#=>3countuniquerows统计一列中的唯一值。len(ratings['user_id'].unique())getdataframeinfo对于按列获取标题、值的数量和数据类型等一般信息很有用。df.dtypes是一个类似但用处不大的函数,它仅提供列数据类型。anime.info()获取统计信息如果数据框有很多值,获取统计信息很有用。了解评级列的平均值、最小值和最大值可以提供数据框的概览。anime.describe()GetSumofValues获取特定列的值总和。anime.type.value_counts()4.输出以CSV格式保存这将转储到与笔记本相同的目录。作者只保留下面的前10行,读者不需要这样做。同样,你也可以使用df.to_excel()函数将表格文件保存为CSV格式。rating[:10].to_csv('saved_ratings.csv',index=False)5.选择获取列的值列表或值范围。当需要将列中的值放入X和y变量以适应机器学习模型时,这会起作用。anime['genre'].tolist()anime['genre']anime['genre'].tolist()anime['genre']获取索引值列表按索引创建值列表。注意这里使用anime_modified数据框是因为索引值比较有趣。anime_modified.index.tolist()获取列值列表anime.columns.tolist()6.Add/RemoveAppendnewcolumnswithsetvalues偶尔,当测试集和训练集在两个单独的数据帧和想把它们结合起来我这样做是在它们之前分别标记了行和集合之间的对应关系时。anime['trainset']=True从列的子集创建一个新的数据框。当您只想在巨大的数据框中保留几列并且不想指定要删除的列时,使用此方法。anime[['name','episodes']]删除指定列删除指定列用于只需要删除几列的情况。否则,写出整个东西可能会很乏味,我更喜欢前者,删除指定的列。anime.drop(['anime_id','genre','members'],axis=1).head()为其他行的总和添加一行这里手动创建了一个小数据框,因为这样更容易看.这里有趣的是df.sum(axis=0)为每一行或每一列添加值。在求和或求平均值时,采用相同的逻辑,如:df.mean(axis=0).f=pd.DataFrame([[1,'Bob',8000],[2,'Sally',9000],[3,'Scott',20]],columns=['id','name','powerlevel'])df.append(df.sum(axis=0),ignore_index=True)7.合并和connecttwoDataframe当你有两个连续的数据帧并且想要组合它们时使用。这里数据框被分成两部分,然后重新加在一起。df1=anime[0:2]df2=anime[2:4]pd.concat([df1,df2],ignore_index=True)合并数据框当你想将两个数据框合并成一列时,合并数据框就像SQL(结构化查询语言)左联接用法。rating.merge(anime,left_on='anime_id',right_on='anime_id',suffixes=('_left','_right'))8.过滤检索匹配索引值的行其中anime_modified中的索引值为name的动漫。请注意这些名称是如何用于获取特定列的。anime_modified.loc[['Haikyuu!!SecondSeason','Gintama']]按编号索引值检索行与上面的函数不同,使用iloc,第一行的索引值为0,第二行的索引值为1,依此类推......即使在修改数据框以在索引列中使用字符串值之后。当您想要获取数据框中的前3行时使用此函数。anime_modified.iloc[0:3]获取行检索给定列值列表中的行。anime[anime['type']=='TV']在匹配单个值时也适用。anime[anime['type'].isin(['TV','Movie'])]拆分数据框这就像拆分表格。拆分数据框以获取特定索引之前/之中/之后的所有行。anime[1:3]通过值过滤过滤符合条件的行的数据帧。但请注意,这将保持现有的索引值。anime[anime['rating']>8]9.排序排序函数sort_values按照列中的值对数据框进行排序。anime.sort_values('rating',ascending=False)10.汇总分组并计算计算列中每个不同值的记录数。anime.groupby('type').count()以不同方式对列进行分组和聚合接下来这样做。anime.groupby(["type"]).agg({"rating":"sum","episodes":"count","name":"last"}).reset_index()创建pivottablepivottable是一种更适合从数据框中提取数据子集的工具。请注意,我对数据框做了很多过滤,因此我可以更快地构建数据透视表。Rating!=-1]pd.pivot_table(tmp_df,values='rating',index=['user_id'],columns=['anime_id'],aggfunc=np.sum,fill_value=0)11.排列和设置非-number(NaN)单元格将非数字单元格设置为0作为值。在示例中,我创建了与之前相同的数据透视表,但我没有使用fill_value=0,而是用fillna(0)填充它。pivot=pd.pivot_table(tmp_df,values='rating',index=['user_id'],columns=['anime_id'],aggfunc=np.sum)pivot.fillna(0)12.作者一直在采样其他数据框从较大的数据框中提取少量样本。如果frac=1,则可以在保留索引的同时进行随机重新排序。anime.sample(frac=0.25)迭代行索引迭代数据框中的索引和行。foridx,rowinanime[:2].iterrows():print(idx,row)startjupyternotebook启动具有高数据速率限制的jupyternotebook程序。jupyternotebook—NotebookApp.iopub_data_rate_limit=1.0e10你喜欢哪些功能?
