我的熊猫备忘单

一位老师曾经告诉我,如果您在书本世界中寻找程序员的类似物,结果发现程序员不像教科书,而是目录:他们不会记住所有内容,但是他们知道如何快速找到所需内容。

快速找到功能描述的能力使程序员可以高效地工作,而不会丢失流的状态。因此,我创建了备忘单,pandas并在其中包含了我每天使用的备忘单,以创建Web应用程序和机器学习模型。 这不是详尽的功能列表,而是包括我最常使用的功能,示例以及我对这些功能特别有用的情况的说明。



pandas

1.工作准备


如果要独立测试此处将要讨论的内容,请从Kaggle 下载“ 动漫推荐数据库”数据集解压缩并将其放在Jupyter Notebook所在的文件夹中(以下称为记事本)。

现在运行以下命令。

import pandas as pd
import numpy as np
anime = pd.read_csv('anime-recommendations-database/anime.csv')
rating = pd.read_csv('anime-recommendations-database/rating.csv')
anime_modified = anime.set_index('name')

之后,您应该能够重现我将在本材料的以下部分中显示的内容。

2.导入数据


▍下载CSV数据


在这里,我想谈谈将CSV数据直接转换为数据帧(转换为数据帧)的过程。有时,当下载CSV格式的数据时,您需要指定其编码(例如,看起来可能像encoding='ISO-8859–1')。如果事实证明装入数据后数据帧包含不可读字符,这是您应该尝试做的第一件事。

anime = pd.read_csv('anime-recommendations-database/anime.csv')


下载的CSV数据

从Excel文件加载数据有类似的功能pd.read_excel

from根据手动输入的数据创建数据框


当您需要在程序中手动输入简单数据时,此功能很有用。例如,如果您需要评估数据经过数据处理管道时发生的变化。

df = pd.DataFrame([[1,'Bob', 'Builder'],
                  [2,'Sally', 'Baker'],
                  [3,'Scott', 'Candle Stick Maker']], 
columns=['id','name', 'occupation'])


手动输入

ing复制数据框


在需要对这些数据进行更改但还需要保存原始数据的情况下,复制数据框可能会派上用场。如果数据帧需要复制,建议下载后立即进行。

anime_copy = anime.copy(deep=True)


数据框的副本

3.数据导出


▍导出为CSV格式


导出数据时,它们与记事本保存在同一文件夹中。下面是保存数据帧的前10行的示例,但是要保存的确切内容取决于特定的任务。

rating[:10].to_csv('saved_ratings.csv', index=False)

您可以使用函数将数据导出为Excel文件df.to_excel

4.查看和研究数据


from从数据帧的开头或结尾获取n条记录


首先,n让我们谈谈数据帧第一个元素的输出我经常从笔记本中某处数据帧的开头推断出许多元素。如果我忘记了数据框中的确切内容,这使我可以方便地访问此数据。最后几个要素的结论起着相似的作用。

anime.head(3)
rating.tail(1)


从数据帧开始的数据


来自数据帧末尾的数据

ing计算数据帧中的行数


len(),我将在此处显示 的功能不包括在内pandas但是它非常适合计算数据帧的行数。其工作结果可以存储在变量中,并在需要时使用。

len(df)
#=> 3

▍计算一列中唯一值的数量


要计算一列中唯一值的数量,可以使用以下构造:

len(ratings['user_id'].unique())

data获取数据框信息


有关数据帧的信息包括有关它的常规信息,例如标题,值的数量,列的数据类型。

anime.info()


数据帧信息

还有另一个类似于df.info-的功能df.dtypes它仅显示有关列的数据类型的信息。

▍显示有关数据框的统计信息


在包含大量数值的情况下,了解有关数据框的统计信息非常有用。例如,了解一列的平均值,最小值和最大值rating可让我们深入了解整个数据框架的外观。这是相应的命令:

anime.describe()


数据框统计

▍计数计算


为了计算特定列中的值数,您可以使用以下构造:

anime.type.value_counts()


计算一列中的项目数

5.从数据帧中提取信息


on根据列值创建列表或系列对象


如果要将列的值提取为变量xy训练模型,这可能会很有用以下命令在此处适用:

anime['genre'].tolist()
anime['genre']


动画的结果['genre']。Tolist()命令


动漫['genre']团队成绩

from从索引中获取值列表


让我们谈谈从索引获取值列表。请注意,我在这里使用了数据框anime_modified,因为它的索引值看起来更有趣。

anime_modified.index.tolist()


团队成绩

▍获取列值列表


这是一个允许您获取列值列表的命令:

anime.columns.tolist()


团队成绩

6.将数据添加到数据框中并从中删除


ing将具有指定值的新列连接到数据框


有时我必须向数据框添加新列。例如-如果我在两个不同的数据框中有测试集和训练集,并且在组合它们之前,我需要对其进行标记,以便以后区分它们。为此,使用以下构造:

anime['train set'] = True

from从一部分列创建一个新的数据框


如果要在新数据框中保存一个巨大数据框中的几列,但是又不想写下要删除的列的名称,这将很有用。

anime[['name','episodes']]


命令结果

▍删除指定的列


如果您只需要从数据框中删除几列,则此技术可能很有用。如果您需要删除许多列,那么此任务可能会非常繁琐,因此在这里我更喜欢使用上一节中介绍的机会。

anime.drop(['anime_id', 'genre', 'members'], axis=1).head()


团队成绩

a将一行与其他行的值之和添加到数据框


为了演示此示例,我们将独立创建一个便于使用的小数据框。这里最有趣的是design df.sum(axis=0),它允许您从不同的行中获取值的总和。 

df = pd.DataFrame([[1,'Bob', 8000],
                  [2,'Sally', 9000],
                  [3,'Scott', 20]], columns=['id','name', 'power level'])
df.append(df.sum(axis=0), ignore_index=True)


命令的结果

视图的命令df.sum(axis=1)允许您对列中的值求和。

类似的机制也适用于计算平均值。例如-df.mean(axis=0)

7.合并数据帧


two两个数据帧的串联


该技术适用于需要合并具有相同列的两个数据帧的情况。

在此示例中,我们首先将数据帧分为两部分,然后再次组合这些部分:

df1 = anime[0:2]
df2 = anime[2:4]
pd.concat([df1, df2], ignore_index=True)


数据框df1


Datframe df2


结合df1和df2的数据框

▍合并数据框


df.merge我们将在此处查看 的功能类似于左侧的SQL连接。当需要在特定列中合并两个数据帧时使用它。

rating.merge(anime, left_on=’anime_id’, right_on=’anime_id’, suffixes=(‘_left’, ‘_right’))


团队成绩

8.过滤


with获取具有所需索引值的行


数据框的索引值是anime_modified动画的名称。注意我们如何使用这些名称来选择特定的列。

anime_modified.loc[['Haikyuu!! Second Season','Gintama']]


团队成绩

by通过数字索引获取字符串


此技术与上一节中描述的技术不同。使用该函数时,df.iloc第一行被分配一个索引0,第二行被分配一个索引1依此类推。即使已修改数据框并在其索引列中使用字符串值,此类索引也会分配给行。

以下构造允许您选择数据框的前三行:

anime_modified.iloc[0:3]


团队成绩

by通过给定的列值获取行


要在存在列值列表的情况下获取数据框的行,可以使用以下命令:

anime[anime['type'].isin(['TV', 'Movie'])]


命令的结果

如果我们对单个含义感兴趣-可以使用以下设计:

anime[anime[‘type’] == 'TV']

▍获取数据帧切片


此技术类似于获取列表的一部分。即,我们正在讨论获取包含对应于给定索引配置的行的数据帧的片段。

anime[1:3]


团队成绩

value按值过滤


从数据框中,可以选择与指定条件匹配的行。请注意,使用此方法将保留现有索引值。

anime[anime['rating'] > 8]


团队成绩

9.排序


要按列值对数据帧进行排序,可以使用函数df.sort_values

anime.sort_values('rating', ascending=False)


团队成绩

10.汇总


▍Df.groupby函数并计算记录数


这是计算列中具有不同值的记录数的方法:

anime.groupby('type').count()


团队成绩

▍df.groupby函数和列聚合的各种方式


请注意此处使用的内容reset_index()否则,该列type将成为索引列。在大多数情况下,我建议您这样做。

anime.groupby(["type"]).agg({
  "rating": "sum",
  "episodes": "count",
  "name": "last"
}).reset_index()

▍创建数据透视表


为了从数据帧中提取一些数据,没有什么比数据透视表更好的了。请注意,这里我认真过滤了数据框,这加速了数据透视表的创建。

tmp_df = rating.copy()
tmp_df.sort_values('user_id', ascending=True, inplace=True)
tmp_df = tmp_df[tmp_df.user_id < 10
tmp_df = tmp_df[tmp_df.anime_id < 30]
tmp_df = tmp_df[tmp_df.rating != -1]
pd.pivot_table(tmp_df, values='rating', index=['user_id'], columns=['anime_id'], aggfunc=np.sum, fill_value=0)


团队成绩

11.数据清理


▍写入包含其他值的NaN值的单元格


在这里,我们讨论将值写入0包含value的单元格中NaN在此示例中,我们创建了与以前相同的数据透视表,但未使用fill_value=0然后用函数fillna(0)来代替值NaN0

pivot = pd.pivot_table(tmp_df, values='rating', index=['user_id'], columns=['anime_id'], aggfunc=np.sum)
pivot.fillna(0)


包含NaN值的表


将NaN值替换为0的结果

12.其他有用的功能


from从数据集中抽样随机样本


df.sample每当需要从大型数据帧中获取随机的小型行集时,我都会 使用该函数如果使用了参数frac=1,则该函数允许您获取原始数据帧的模拟,该原始数据帧的行将被混合。

anime.sample(frac=0.25)


团队成绩

data选择数据框行


以下构造允许您遍历数据框的行:

for idx,row in anime[:2].iterrows():
    print(idx, row)


团队成绩

▍战斗IOPub数据速率超出错误


如果遇到错误IOPub data rate exceeded,请在启动Jupyter Notebook时尝试使用以下命令:

jupyter notebook — NotebookApp.iopub_data_rate_limit=1.0e10

摘要


在这里,我谈到pandas使用Jupyter Notebook环境的一些有用技巧。我希望我的备忘单能派上用场。

亲爱的读者们!有没有机会pandas无法想象您的日常工作?


All Articles