一位老师曾经告诉我,如果您在书本世界中寻找程序员的类似物,结果发现程序员不像教科书,而是目录:他们不会记住所有内容,但是他们知道如何快速找到所需内容。快速找到功能描述的能力使程序员可以高效地工作,而不会丢失流的状态。因此,我创建了备忘单,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)
▍计算一列中唯一值的数量
要计算一列中唯一值的数量,可以使用以下构造:len(ratings['user_id'].unique())
data获取数据框信息
有关数据帧的信息包括有关它的常规信息,例如标题,值的数量,列的数据类型。anime.info()
数据帧信息还有另一个类似于df.info
-的功能df.dtypes
。它仅显示有关列的数据类型的信息。▍显示有关数据框的统计信息
在包含大量数值的情况下,了解有关数据框的统计信息非常有用。例如,了解一列的平均值,最小值和最大值rating
可让我们深入了解整个数据框架的外观。这是相应的命令:anime.describe()
数据框统计▍计数计算
为了计算特定列中的值数,您可以使用以下构造:anime.type.value_counts()
计算一列中的项目数5.从数据帧中提取信息
on根据列值创建列表或系列对象
如果要将列的值提取为变量x
并y
训练模型,这可能会很有用。以下命令在此处适用: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)
数据框df1Datframe 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)
来代替值NaN
用0
。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
无法想象您的日常工作?