series 合并pandas_数据科学速成班-深度Pandas教程

用于关系数据的终极Python库

> Photo by Pascal Müller on Unsplash

本月初,我和爱德华·钱(Edward Qian)和我开始为有抱负的数据科学家设计一套全面的课程,可以在我们的网站www.dscrashcourse.com上找到这些课程。

我将把稍作修改的课程交叉发布到中级课程,以使更多的读者可以使用。 如果您发现这些文章有帮助,请访问该站点以获取更多课程和练习问题!

pandas是一个Python库,可以轻松读取,导出和使用关系数据。 本课将扩展其功能和用法。 我们通常将熊猫作为pd导入,以使用缩写形式引用该库。 下面共享的所有代码都是使用pandas == 0.24.2的Python 3编写的。

Pandas系列

根据官方文档,Series是带有轴标签的一维ndarray。 ndarray是在numpy库中找到的一种特殊数据类型,它定义了固定大小的元素数组。 简单来说,"系列"是表或电子表格中具有相同数据类型的列。 每个系列都有一个用于指示轴标签的索引。

我们可以使用pd.Series(['some','array','object'])创建一个Series

Index序列

我们可以使用轴标签或位置标签来查找系列值。 如果未指定,则Series轴标签(也称为Series索引)将默认为整数。 我们也可以将索引设置为字符串。

sample_series = pd.Series(['some', 'array', 'object'], index=list('abc')) # positional indexing: this returns the first value, which is 'some'sample_series[0]# label indexing: this also returns the first value 'some'sample_series['a']

这就是sample_series的样子。

我们可以对系列进行切片以获取一系列值。 使用轴标签时,切片行为有所不同-与通常的Python切片相反,起点和终点都包括在内!

# positional slicing: this returns the first two values sample_series[:2]  # label slicing: this also returns the first two valuessample_series[:'b']

Pandas数据框

DataFrames用于定义二维数据。 使用索引标记行,使用列标题标记列。 每列都可以解释为系列。 我们可以使用pd.DataFrame({'column 1':[1,1],'column 2':[2,2]})创建一个DataFrame。

另外,我们也可以将表格数据读取到DataFrames中。

# Read in a CSV filecsv_dataframe = pd.read_csv('my_csv_file.csv') # Read in an Excel filexls_dataframe = pd.read_excel('my_xls_file.xls')

索引数据帧

我们可以使用方括号对DataFrame列进行索引。 让我们以我们创建的非常简单的DataFrame为例。

sample_dataframe = pd.DataFrame({'column 1': [1, 1], 'column 2': [2, 2]}) # get the column 'column 1'sample_dataframe['column 1']

对于更复杂的索引,我们可以使用.iloc或.loc。

· loc是基于标签的索引方法,它需要行和列的名称

· iloc是基于位置的索引方法,该方法需要值的位置

因为我们没有为行指定轴标签,所以它们采用了默认的整数值。 因此,此DataFrame的位置标签和轴标签相同。

我们可以使用以下任一方法检索第一行:

sample_dataframe.iloc[0, :]sample_dataframe.loc[0, :]

用Pandas探索合成数据集

让我们创建另一个DataFrame来说明一些功能。 我们可以假装此数据取自分发教育材料的公司。

data = pd.DataFrame({'customer_id': [1,2,3,4,5,6,7,8],                      'age': [29,43,22,82,41,33,63,57],                      'email_linked': [True,True,False,True,False,False,True,True],                     'occupation': ['teacher','highschool teacher','student','retired',                                    'tutor','unemployed','entrepreneur','professor']})

对于较大的DataFrame,我们可以使用.head(n)查看前n行。 要查看最后几行,我们可以使用.tail(n)执行类似的操作。 对于我们的小型数据集而言,这都不是必需的,但我们仍然可以使用data.head(3)进行演示。

过滤和索引数据框

假设我们要运行一个电子邮件活动。 我们首先提取相关的列来开展我们的运动。

# use double brackets to index multiple columns, single brackets for one columnemail_data = data[['customer_id', 'email_linked']]

并非所有客户都有链接的电子邮件,因此我们绝对希望排除那些没有链接的电子邮件。

# the condition goes inside the square brackets email_data = email_data[email_data['email_linked']]

应用逐列函数

让我们编写一个非常简单的函数来确定客户是否为教育工作者。 这就是我们定义教育者的方式。

def is_educator(occupation):    return 'teacher' in occupation.lower() or occupation.lower() in ['tutor', 'professor', 'lecturer']

我们可以将此功能应用于职业列以创建一个新列。

data['is_educator'] = data['occupation'].apply(is_educator)

我们还可以转换DataFrame每列中的所有行。 这就要求我们设置axis = 0(这也是默认设置)。 我们可以编写逐列函数,以删除任何包含缺少值的列。 这仅用于演示-有更好的方法来处理缺失的值(请参阅Pandas官方文档)。

def remove_missing_columns(col): if col.isnull().values.any(): return coldata.apply(remove_missing_columns, axis=0)

应用逐行函数

我们还可以应用函数来转换行中的每一列。 这要求我们将axis = 1。

def is_educator_above_50(row): return row['age'] > 50 and is_educator(row['occupation'])data['is_educator_above_50'] = data.apply(is_educator_above_50, axis=1)

分组操作

Groupby操作对于分析Pandas对象和从大量数据中设计新功能很有用。 所有groupby操作可以分为以下步骤:

· 将对象分成组

· 将功能应用于每个组

· 合并结果

通常,根据某些条件对对象进行拆分,然后为每个组计算摘要统计量,然后将其合并为更大的对象。 我们可以使用groupby运算来计算每个职业的平均年龄。

· 按职业拆分DataFrame

· 对每个职业应用均值函数

· 将平均年龄结合到自己的对象中

该操作的代码非常简单:data.groupby(by=['occupation']).mean()['age']

" by"参数指示如何确定组," mean()"是关注的统计量,按年龄编制索引可获取年龄的组统计量。 输出是一系列,其中职业是轴标签。

我们可以使用多个参数来划分组,例如,职业的组合以及是否链接了他们的电子邮件:data.groupby(by=['email_linked', 'occupation']).mean()['age']

除了平均值以外,我们还可以将其他内置函数应用于每个组:最小,最大,计数,总和等。 我们还可以使用agg()来应用任何自定义函数。 聚合方法对于返回多个摘要统计信息也很有用。

例如,data.groupby(by=['occupation']).agg(['mean', 'sum'])['age']将返回平均年龄以及每个组的年龄总和。

DataFrame属性

这些属性可帮助我们探索并熟悉新的DataFrame。

· data.columns返回所有列的列表

· data.shape以(行数,列数)的形式返回尺寸

· data.dtypes返回每一列的数据类型

· data.index返回索引值的范围

以下是一些其他有用的阅读材料:

· 有关语法,用法和更多示例,请参阅官方熊猫文档。

· 图书:用于数据分析的Python:使用Pandas,NumPy和IPython处理数据

感谢您的阅读!

如果您喜欢这篇文章,则可能需要查看我有关数据科学,数学和编程的其他文章。 在" Medium"上关注我以获取最新更新!

(本文翻译自Mandy Gu的文章《In-Depth Pandas Tutorial》,参考:https://towardsdatascience.com/in-depth-pandas-tutorial-5d896483ba8a)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值