pandas入门记录--基于Hands on Machine Learning 2配套文件

在这里插入图片描述
本文是基于《机器学习实战》配套的tools_numpy 的notebook文件写的
具体可查看
https://homl.info/kaggle/

在这里插入图片描述

pandas提供高性能、易于使用的数据结构和数据分析工具。主要的数据结构是DataFrame,您可以将其视为内存中的2D表(类似于电子表格,具有列名和行标签)。Excel中的许多功能都可以通过编程实现,例如创建数据透视表、基于其他列计算列、绘制图表等。您还可以按列值对行进行分组,或者像在SQL中一样连接表。pandas也很擅长处理时间序列。

Setup

import pandas as pd

Series objects

pandas库包含以下有用的数据结构:
Series,一维数组,类似于电子表格中的一列
DataFrame,二维数组,类似于电子表格(带有列名和行标签)
Panel,你可以把Panel看作DataFrame的一个字典。

Creating a Series

形式:pd.Series(数组)
在这里插入图片描述

Similar to a 1D ndarray

你可以将它们作为参数传递给Numpy函数:
在这里插入图片描述
在序列上进行算术运算是可行的,它们是基于元素进行的,就像ndarray一样
在这里插入图片描述
与NumPy类似,如果向系列中添加一个数字,该数字将添加到系列中的所有项目。这叫做广播:
在这里插入图片描述
所有二进制运算(如*或/)都是如此,甚至条件运算也是如此:
在这里插入图片描述

Index labels

序列中的每一个项目都有一个唯一的标识符,称为索引标签。默认情况下,它从0开始,你也可以手动设置索引标签。
形式:pd.Series([数组],index=[字符串数组])
在这里插入图片描述

你也可以像字典一样使用Series:
在这里插入图片描述

你也可以像普通数组一样访问其中的元素
在这里插入图片描述

为了明确你是按标签还是按整数位置访问,建议在按标签访问时时钟使用loc属性,在按整数位置访问时始终使用iloc属性:
形式:
序列.loc[索引标签]
序列.iloc[整数索引标签]
在这里插入图片描述

对Series进行切片的同时也对索引标签进行切片:
在这里插入图片描述

使用默认数字标签时,这可能会导致意外的结果,因此请小心:
在这里插入图片描述
在这里插入图片描述
但是请记住,您可以使用iloc属性通过整数位置来访问元素。这说明了为什么使用loc和iloc访问Series对象总是更好的另一个原因:
在这里插入图片描述

Init from dict

你可以从一个字典创建Series,其中的键值就会成为索引标签:
在这里插入图片描述

你甚至可以指定字典中的哪些项包含进Series中,通过显式地在index中指定
在这里插入图片描述

Automatic alignment(自动对齐)

当要操作多个Series时,pandas会根据标签匹配并自动对齐
在这里插入图片描述
输出序列中的所有标签,调用方法 序列对象.keys()
输出序列中的所有数值,调用方法 序列对象.values()

生成的序列包含来自s2和s3的索引标签的并集。由于s2中缺少“colin”而s3中缺少“charles”,因此这些项目具有NaN结果值。(即非数字表示缺失)。

自动对齐在处理可能来自不同来源的不同结构和缺失项目的数据时非常方便。但是如果你忘记设置正确的索引标签,你会得到令人惊讶的结果:

在这里插入图片描述

Pandas无法对齐序列,因为它们的标签根本不匹配,因此会产生完全的NaN结果。

Init with a scalar

你也可以使用标量和索引标签列表来初始化Series对象:所有项目都将被设置为标量。
在这里插入图片描述

Series name

一个序列可以带名字
形式:pd.Series(数组,index,name=字符串)
在这里插入图片描述

Plotting a Series

Pandas使利用matplotlib绘制Series数据变得很容易(有关matplotlib的更多详细信息,请查看matplotlib教程)。只需导入matplotlib并调用plot()方法:
在这里插入图片描述
更多其它形式的plot(直方图,饼图,参考https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)

Handling time

许多数据集有时间戳,pandas非常擅长于处理这样的数据:
它可以表示周期(如2016年第3季度)和频率(如“每月”),
它可以将周期转换为实际时间戳,反之亦然,
它可以按照您喜欢的任何方式对数据进行重新采样并聚合值,
它可以处理时区。

Time range

通过**pd.date_range()**创建一个时间序列,如下是返回间隔为1h,长度为12h的DatetimeIndex。
在这里插入图片描述

这个DatetimeIndex可以在Series作为Index来使用,使用pd.Series是传入到Index的位置上。
在这里插入图片描述
用条状图的方式展示
在这里插入图片描述

Resampling

Pandas让我们可以非常简单地对时间序列重新取样。只需调用resample()方法并指定一个新频率:
在这里插入图片描述
重采样操作实际上是一个延迟操作,这就是为什么我们没有得到Series对象,而是得到了DatetimeIndexResampler对象。为了实际执行重采样操作,我们可以简单地调用mean()方法:Pandas将计算每对连续小时的平均值:
在这里插入图片描述
在这里插入图片描述
请注意这些值是如何自动聚合成2小时周期的。例如,如果我们查看下午6-8点的时间段,我们在下午6:30的值为5.1,在晚上7:30的值为6.1。重采样后,我们只有一个值5.6,是5.1和6.1的平均值。除了计算平均值,我们还可以使用任何其他聚合函数,例如,我们可以决定保留每个周期的最小值:
在这里插入图片描述

Upsampling and interpolation

这是下采样的一个例子。我们也可以向上取样,增加频率,但这会在我们的数据中造成漏洞:
在这里插入图片描述
一种解决方案是通过插值来填补空白。我们只需要调用interpolate()方法。默认是使用线性插值,但我们也可以选择另一种方法,例如三次插值:
在这里插入图片描述
在这里插入图片描述

Timezones

默认情况下,日期时间是幼稚的:它们不知道时区,所以2016-10-30 02:30可能意味着巴黎或纽约的2016年10月30日凌晨2:30。我们可以通过调用tz_localize()方法来了解日期时间时区:
在这里插入图片描述
注意-04:00现在被附加到所有的日期时间。这意味着这些日期时间指的是世界协调时- 4小时。
我们可以将这些日期时间转换为巴黎时间,如下所示:
在这里插入图片描述您可能已经注意到,世界协调时偏移从+02:00变为+01:00:这是因为法国在那个特定的夜晚凌晨3点切换到冬季时间(时间回到凌晨2点)。请注意,凌晨2:30发生了两次!让我们回到一个简单的表示(如果您使用本地时间每小时记录一些数据,而不存储时区,您可能会得到如下结果):
在这里插入图片描述
现在02:30确实是模棱两可。如果我们尝试将这些原本的日期时间本地化为Paris时区,则会得到一个错误:
在这里插入图片描述
幸运的是,使用 ambiguous 参数,我们可以告诉pandas根据模棱两可的时间戳的顺序来推断正确的DST(夏令时)。
在这里插入图片描述

Periods

pd.period_range()函数返回一个PeriodIndex,而不是一个DatetimeIndex。例如,让我们获得2016年和2017年的所有季度。
在这里插入图片描述
形式:pd.period_range(start,periods产生的周期数,freq频率别名)

在PeriodIndex上增加一个数字N,就可以将周期移到PeriodIndex频率的N倍。
在这里插入图片描述
asfreq()方法让我们改变PeriodIndex的频率。所有的周期都会相应延长或缩短。例如,让我们把所有的季度周期转换为月度周期(放大)。
在这里插入图片描述
默认情况下,asfreq会在每个周期的末尾进行放大。我们可以告诉它在每个周期的开始时放大。
在这里插入图片描述

而且我们可以放大。
在这里插入图片描述

当然,我们可以创建一个带有PeriodIndex的序列。
在这里插入图片描述
在这里插入图片描述
我们可以通过调用to_timestamp将周期转换为时间戳。默认情况下,这将给我们每个时期的第一天,但通过设置how和freq,我们可以得到每个时期的最后一个小时。
在这里插入图片描述
并通过调用to_period返回到周期:
在这里插入图片描述
Pandas还提供了许多其他与时间有关的功能,我们建议你在文档中查看。为了吊起你的胃口,这里有一种方法可以得到2016年每个月的最后一个工作日,上午9点。
在这里插入图片描述
分解整个过程:
首先,months_2016得到的是2016年的所有月份
在这里插入图片描述
通过asfreq方法转换默认得到的是对应的每个月最后一天,然后先加1,方便后面做转换
在这里插入图片描述
pd.tseries.offsets.BDay()减去一个工作日的偏置,得到每月最后一个工作日‘’
在这里插入图片描述
最后转换成基于小时的period…然后加上9
在这里插入图片描述

DataFrame objects

一个DataFrame对象代表一个电子表格,有单元格值、列名和行索引标签。你可以定义表达式来计算基于其他列的列,创建透视表,分组行,绘制图表等。你可以把DataFrames看作是序列的字典。

Creating a DataFrame

你可以通过传递一个序列对象的字典来创建一个DataFrame。
形式:
字典={关键字:pd.Series , 关键字:pd.Series,…}
pd.DataFrame(字典)
在这里插入图片描述

有几件事需要注意:
序列是根据其索引自动排列的。
缺少的值用NaN表示。
序列名称被忽略("年 "的名称被删除)。
序列的index被用作行名称,字典的关键字用作列名。

你可以像你所期望的那样访问列。它们将作为序列对象返回。
在这里插入图片描述
你也可以一次获得多个栏目:
在这里插入图片描述
如果你向DataFrame构造函数传递一个列和/或索引行标签的列表,它将保证这些列和/或行将以该顺序存在,而没有其他列/行将存在。比如说:
在这里插入图片描述
另一种创建DataFrame的方便方法是将所有的值作为ndarray或列表传递给构造函数,并分别指定列名和行索引标签。

形式:pd.DataFrame(二维列表,列名,行名)
在这里插入图片描述
为了指定缺失值,你可以使用np.nan或NumPy的掩码数组。
在这里插入图片描述
说实话,掩码这里没看懂。

你也可以传递一个DataFrame对象,而不是ndarray。
在这里插入图片描述
也可以用一个字典(或列表)来创建一个DataFrame:
对应前面那个传入pd.Series的例子很好理解
在这里插入图片描述

Multi-indexing

如果所有的列都是大小相同的元组,那么它们就被理解为一个多索引。行索引标签也是如此。比如说
在这里插入图片描述
现在你可以非常简单地得到一个包含所有 "Public"列的DataFrame。
在这里插入图片描述
在这里插入图片描述

Dropping a level

再看一次d5:
在这里插入图片描述
有两层的列,和两层的索引。我们可以通过调用droplevel()来降低一个列的级别(对于索引也是如此):
在这里插入图片描述
可以看到列的privae和public消失了。

Transposing

你可以使用T属性交换列和索引。
在这里插入图片描述

Stacking and unstacking levels

调用stack()方法会将最低级的列压到最低级的行索引后面
在这里插入图片描述

请注意,出现了许多NaN值。这是有道理的,因为许多新的组合以前并不存在(例如,在伦敦没有鲍勃)。

调用unstack()将做相反的事情,再次产生许多NaN值。
在这里插入图片描述
如果我们再次调用unstack,我们最终会得到一个Series对象。
在这里插入图片描述

stack()和unstack()方法让你选择要堆叠/取消堆叠的级别。你甚至可以一次性堆叠/解叠多个层次。
在这里插入图片描述

Most methods return modified copies

正如你可能已经注意到的,stack()和unstack()方法并不修改它们所适用的对象。相反,它们在一个副本上工作并返回该副本。这也是pandas中大多数方法的真实情况。

Accessing rows

先看一下之前的名为people的DataFrame对象:
在这里插入图片描述

loc属性允许你访问行而不是列。其结果是一个Series对象,其中DataFrame的列名被映射为行索引标签。
在这里插入图片描述
你也可以使用iloc属性按整数位置访问行。
在这里插入图片描述
你也可以得到一个行的切片,这将返回一个DataFrame对象:
在这里插入图片描述
最后,你可以传递一个布尔数组来获得匹配的行。
在这里插入图片描述
这在与布尔表达式结合时最有用。
在这里插入图片描述

Adding and removing columns

一般来说,你可以把DataFrame对象当作Series的字典,所以下面的工作很好。
在这里插入图片描述
首先,要理解,一列是一个Series对象,Series的Index就是行名,列名看作是字典中的关键字。
先是新增一列“age”
在这里插入图片描述
然后,增加一列“over 30 ”,用于返回对应的布尔序列
在这里插入图片描述
可以把DataFrame看成是list然后调用pop方法
在这里插入图片描述
也可以看作是字典,del其中的条目
在这里插入图片描述
被pop出来的pd.Series
在这里插入图片描述

当你添加一个新的列时,它必须有相同数量的行。缺少的行会用NaN填充,多余的行会被忽略。
在这里插入图片描述

当添加一个新的列时,默认情况下,它被添加在最后(右边)。你也可以使用insert()方法在其他地方插入一个列:
在这里插入图片描述
形式:DataFrame.insert(loc, column, value, allow_duplicates=False)

Assigning new columns

你也可以通过调用assign()方法创建新的列。注意,这将返回一个新的DataFrame对象,原来的对象不被修改。
在这里插入图片描述
注意,你不能访问在同一任务中创建的列。
在这里插入图片描述
解决办法是将这项任务分成两个连续的任务。
在这里插入图片描述
必须创建一个临时变量d6并不是很方便。你可能想通过链式分配调用,但这并不奏效,因为people对象实际上并没有被第一次分配所修改。

在这里插入图片描述
但不要害怕,有一个简单的解决方案。你可以向assign()方法传递一个函数(通常是一个lambda函数),这个函数将以DataFrame为参数被调用。
在这里插入图片描述

Evaluating an expression

pandas支持的一个伟大功能是表达式评估。这有赖于必须安装的numexpr库。
在这里插入图片描述
也支持赋值表达式。让我们设置inplace=True来直接修改DataFrame,而不是得到一个修改的副本。
在这里插入图片描述
你可以在表达式中使用一个局部或全局变量,方法是在它前面加上"@"。

在这里插入图片描述

Querying a DataFrame

query()方法让你根据查询表达式来过滤一个DataFrame。
在这里插入图片描述

Sorting a DataFrame

你可以通过调用DataFrame的sort_index方法对其进行排序。默认情况下,它按照索引标签对行进行排序,以升序排列,但让我们把顺序颠倒一下。
在这里插入图片描述
注意,sort_index返回的是DataFrame的一个排序副本。要直接修改人,我们可以将inplace参数设置为True。另外,我们可以通过设置axis=1来对列而不是行进行排序。
在这里插入图片描述
要按数值而不是标签对DataFrame进行排序,我们可以使用sort_values并指定要排序的列。
在这里插入图片描述

Plotting a DataFrame

就像 Series 一样,pandas 使得在 DataFrame 的基础上绘制漂亮的图表变得容易。
例如,通过调用DataFrame的绘图方法,从DataFrame的数据中创建一个线图是很容易的。
在这里插入图片描述
你可以传递matplotlib的函数所支持的额外参数。例如,我们可以创建scatterplot并使用matplotlib的scatter()函数的s参数传递给它一个大小列表:
在这里插入图片描述

同样,有太多的选项可以在这里列出:最好的选择是滚动浏览pandas文档中的可视化页面,找到你感兴趣的情节并查看示例代码。

Operations on DataFrames

尽管DataFrames并不试图模仿NumPy数组,但还是有一些相似之处。让我们创建一个DataFrame来证明这一点。
在这里插入图片描述

你可以在一个DataFrame上应用NumPy数学函数:该函数被应用于所有的值。
在这里插入图片描述

类似地,向一个DataFrame添加一个值将会把这个值添加到DataFrame中的所有元素。这就是所谓的广播。
在这里插入图片描述

当然,所有其他二进制操作也是如此,包括算术(*,/,**…)和条件(>,==…)操作。
在这里插入图片描述
聚合操作,如计算DataFrame的最大值、总和或平均值,适用于每一列,你将得到一个Series对象。
在这里插入图片描述

all方法也是一个聚合操作:它检查所有的值是否为真。让我们看看在哪些月份所有的学生的成绩都大于5。
在这里插入图片描述

这些函数中的大多数都有一个可选的轴参数,让你指定要沿着DataFrame的哪个轴执行操作。默认是axis=0,意味着操作是垂直执行的(在每一列)。你可以设置axis=1来水平地执行操作(在每一行)。例如,让我们找出哪些学生的成绩都大于5。

在这里插入图片描述

any方法在任何值为 "真 "时返回 “真”。让我们看看谁得到了至少一个10级:
在这里插入图片描述

如果你将一个Series对象添加到一个DataFrame中(或者执行任何其他二进制操作),pandas会尝试将该操作广播给DataFrame中的所有行。这只有在系列对象的大小与DataFrame的行数相同时才有效。例如,让我们从DataFrame中减去DataFrame的平均值(一个系列对象):
在这里插入图片描述

我们从所有九月的成绩中减去7.75,从十月的成绩中减去8.75,从十一月的成绩中减去7.50。相当于减去了这个DataFrame:
在这里插入图片描述

如果你想从每个年级中减去全局平均数,这里有一种方法可以做到:
在这里插入图片描述

Automatic alignment

与Series类似,当对多个DataFrame进行操作时,pandas会自动按行索引标签对齐,但也可以按列名对齐。让我们创建一个DataFrame,其中有10月到12月每个人的奖励积分。
在这里插入图片描述

看起来在某些情况下,增加的内容是有效的,但现在有太多的元素是空的。这是因为在对齐DataFrames时,有些列和行只出现在一侧,因此它们被认为在另一侧缺失(NaN)。然后把NaN加到一个数字上,结果是NaN,因此出现了这样的结果。

Handling missing data

在处理现实生活中的数据时,处理缺失数据是一项频繁的任务。Pandas提供了一些工具来处理缺失数据。

让我们试着解决上面的问题。例如,我们可以决定缺失的数据应该导致一个零,而不是NaN。我们可以使用**fillna()**方法将所有的NaN值替换为一个任意值。

在这里插入图片描述

不过,我们在9月份将成绩设为零,这有点不公平。也许我们应该决定,缺失的成绩就是缺失的成绩,但缺失的奖励分数应该用零来代替。
在这里插入图片描述

这就好多了:虽然我们编造了一些数据,但我们并没有太不公平.
另一种处理缺失数据的方法是插值。让我们再看一下bonus_points DataFrame:
在这里插入图片描述

现在我们来调用插值方法。默认情况下,它是垂直插值(aixs=0),所以让我们告诉它水平插值(asix=1)。
在这里插入图片描述
鲍勃在10月有0个奖励积分,12月有2个。当我们对11月进行内插时,我们得到了平均值。1个奖励分。科林在11月有1个奖励积分,但我们不知道他在9月有多少个奖励积分,所以我们不能插值,这就是为什么插值后10月仍有一个缺失值。为了解决这个问题,我们可以在插值前将9月份的奖金点数设置为0。
在这里插入图片描述
很好,现在我们到处都有合理的奖励分。让我们来看看最后的成绩。
在这里插入图片描述
9月的那一列最后被放在了右边,这有点令人讨厌。这是因为我们添加的DataFrame没有完全相同的列(成绩DataFrame缺少 "dec "列),所以为了使事情可预测,pandas按字母顺序排列最后的列。为了解决这个问题,我们可以在添加之前简单地添加缺少的那一列。
在这里插入图片描述
对于12月和科林,我们能做的不多:我们补足奖励分已经很糟糕了,但我们不能合理地补足成绩(好吧,我想有些老师可能会这样做)。因此,让我们调用dropna()方法来摆脱那些充满NaN的行。
在这里插入图片描述
现在让我们通过设置轴参数为1来删除那些充满NaN的列
在这里插入图片描述

Aggregating with groupby

与SQL语言类似,pandas允许将你的数据分组,在每个组上运行计算。

首先,让我们添加一些关于每个人的额外数据,这样我们就可以对他们进行分组,让我们回到final_grades DataFrame,这样我们就可以看到如何处理NaN值了。
在这里插入图片描述
现在让我们按爱好对该数据框架中的数据进行分组:
在这里插入图片描述
我们准备计算每个爱好的平均成绩:
在这里插入图片描述
这很容易! 请注意,在计算平均值时,NaN值已经被简单地跳过了。

Pivot tables(数据透视表)

Pandas支持类似电子表格的透视表,可以快速地进行数据汇总。为了说明这一点,让我们创建一个简单的DataFrame:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在我们可以为这个DataFrame调用pd.pivot_table()函数,要求按名称列分组。默认情况下,pivot_table()会计算每个数字列的平均值:
在这里插入图片描述
我们可以通过设置aggfunc参数来改变聚合函数,我们还可以指定其值将被聚合的列的列表:
在这里插入图片描述

我们还可以指定要水平汇总的列,并通过设置margins=True来要求每行和每列的总计:
在这里插入图片描述
最后,我们可以指定多个索引或列名,pandas将创建多级索引:
在这里插入图片描述

Overview functions

当处理大的DataFrames时,快速了解其内容是很有用的。Pandas为此提供了一些功能。首先,让我们创建一个混合了数字值、缺失值和文本值的大型DataFrame。注意Jupyter只显示DataFrame的角落:
在这里插入图片描述

head()方法返回前5行的数据:
在这里插入图片描述

当然,也有一个tail()函数来查看最下面的5行。你可以传递你想要的行数:
在这里插入图片描述

info()方法会打印出每一列内容的摘要:
在这里插入图片描述

最后,describe()方法对每一列的主要聚合值给出了一个很好的概述。

count:非空值(非NaN)的数量
mean:非空值的平均值
std:非空值的标准差
min:非空值的最小值
25%, 50%, 75%: 25%、50%和75%的非空值的百分位数
max:非空值的最大值
在这里插入图片描述

Saving & loading

Pandas可以将DataFrames保存到各种后端,包括CSV、Excel、JSON、HTML和HDF5等文件格式,或者保存到SQL数据库。让我们创建一个DataFrame来演示一下:
在这里插入图片描述

Saving

让我们把它保存为CSV、HTML和JSON:
在这里插入图片描述

完成了! 让我们看一看保存的内容。
在这里插入图片描述
在这里插入图片描述

Loading

现在让我们把我们的CSV文件加载到一个DataFrame中。
在这里插入图片描述

正如你可能猜到的,也有类似的read_json、read_html、read_excel函数。我们还可以直接从互联网上读取数据。例如,让我们从github上加载美国前1000个城市的数据。
在这里插入图片描述

Combining DataFrames

SQL-like joins

在这里插入图片描述
在这里插入图片描述

现在让我们用merge()函数来连接这些DataFrames:
在这里插入图片描述
请注意,两个DataFrames都有一个名为state的列,所以在结果中它们被重命名为state_x和state_y。

另外,注意克利夫兰、盐湖城和休斯顿被删除了,因为它们不存在于两个数据框架中。这相当于SQL的INNER JOIN。如果你想要一个FULL OUTER JOIN,没有城市被删除,NaN值被添加,你必须指定how=“outer”:

在这里插入图片描述

当然,LEFT OUTER JOIN也可以通过设置how="left "来实现:只有存在于左边DataFrame的城市才会出现在结果中。同样地,如果设置how=“right”,则只有右边数据框架中的城市出现在结果中。例如:
在这里插入图片描述
如果要连接的键实际上在一个(或两个)DataFrame的索引中,你必须使用left_index=True和/或right_index=True。如果键的列名不同,你必须使用left_on和right_on。比如说:
在这里插入图片描述

Concatenation

我们可能只是想把它们连接起来,而不是连接DataFrames。这就是concat()的作用:
在这里插入图片描述

请注意,这个操作是按水平方向(按列)排列数据,而不是按垂直方向(按行)排列。在这个例子中,我们最终会发现有多行具有相同的索引(比如3)。Pandas对此的处理是相当优雅的:
在这里插入图片描述
或者你可以告诉pandas,让它直接忽略这个索引:
在这里插入图片描述
请注意,当一个列不存在于DataFrame中时,它的行为就像被填入NaN值一样。如果我们设置join=“inner”,那么只有存在于两个DataFrame中的列被返回:
在这里插入图片描述
你可以通过设置axis=1来水平连接DataFrames而不是垂直连接:
在这里插入图片描述

在这种情况下,它真的没有什么意义,因为索引没有很好地对齐(例如,克利夫兰和旧金山最终出现在同一行,因为它们共享索引标签3)。因此,让我们在串联之前按城市名称重新索引DataFrames:
在这里插入图片描述
这看起来很像一个FULL OUTER JOIN,只是state列没有被重命名为state_x和state_y,而且city列现在是索引。

append()方法是垂直连接DataFrames的一个有用的速记方法。
在这里插入图片描述
如同pandas的一贯做法,append()方法实际上并没有修改city_loc:它在一个副本上工作,并返回修改后的副本。

Categories

有一些代表类别的值是很常见的,例如1代表女性,2代表男性,或者 "A "代表好,"B "代表一般,"C "代表坏。这些分类值可能很难阅读,处理起来也很麻烦,但幸运的是,pandas让它变得简单。为了说明这一点,让我们拿我们之前创建的city_pop DataFrame,并添加一列表示类别的数据。

在这里插入图片描述
现在,eco_code一栏充满了明显无意义的代码。让我们来解决这个问题。首先,我们将在生态代码的基础上创建一个新的分类列。
在这里插入图片描述
现在我们可以给每个类别起一个有意义的名字。
在这里插入图片描述
请注意,分类值的排序是根据其分类顺序,而不是按字母顺序。
在这里插入图片描述

What next?

正如你现在可能已经注意到的,pandas是一个相当大的库,有很多功能。尽管我们经历了最重要的功能,但仍有很多东西需要发现。学习更多知识的最好方法可能是亲自动手处理一些实际生活中的数据。仔细阅读pandas的优秀文档,尤其是Cookbook,也是一个好主意。

documentation: https://pandas.pydata.org/pandas-docs/stable/index.html
cookbook: https://pandas.pydata.org/pandas-docs/stable/user_guide/cookbook.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值