首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python科学计算之Pandas

在我看来,对于Numpy以及Matplotlib,Pandas可以帮助创建一个非常牢固的用于数据挖掘与分析的基础。而Scipy(会在接下来的帖子中提及)当然是另一个主要的也十分出色的科学计算库,但是我认为前三者才是真正的Python科学计算的支柱。所以,不需要太多精力,让我们马上开始Python科学计算系列的第三帖——Pandas。如果你还没有查看其他帖子,不要忘了去看一下哦!

这里我们从csv文件中读取到了数据,并将他们存入了dataframe中。我们只需要调用read_csv函数并将csv文件的路径作为函数参数即可。header关键字告诉Pandas这些数据是否有列名,在哪里。如果没有列名,你可以将其置为None。Pandas非常智能,所以你可以省略这一关键字。将你的数据准备好以进行挖掘和分析现在我们已经将数据导入了Pandas。

另一方面,你可能想要获得最后x行的数据:

类似于head,我们只需要调用tail函数并传入我们想获取的行数。需要注意的是,Pandas不是从dataframe的结尾处开始倒着输出数据,而是按照它们在dataframe中固有的顺序输出给你。你将获得类似下图的表

当你在Pandas中查找列时,你通常需要使用列名。这样虽然非常便于使用,但有时候,数据可能会有特别长的列名,例如,有些列名可能是问卷表中的某整个问题。把这些列名变短会让你的工作更加轻松:

这将给你一个整数告诉你数据的行数。在我的数据集中,我有33行。此外,你可能需要知道你数据的一些基本的统计信息。Pandas让这件事变得非常简单。

这里返回的结果和之前的一模一样,即一个包含我们所选列的数据的series。如果你读过这一系列中Numpy那一篇帖子,你可能会记得一项技术叫做‘booleanmasking’,即我们可以在数组上运行一个条件语句来获得对应的布尔值数组。好,我们也可以在Pandas中做同样的事。

上述代码将范围一个布尔值的dataframe,其中,如果9、10月的降雨量低于1000毫米,则对应的布尔值为‘True’,反之,则为’False’。我们也可以使用这些条件表达式来过滤一个已知的dataframe。

好消息是,如果在你的数据中有字符串,你也可以使用字符串方法来过滤数据。

iloc仅仅作用于数字索引。它将会返回该行的一个series。在返回的series中,这一行的每一列都是一个独立的元素。可能在你的数据集里有年份的列,或者年代的列,并且你希望可以用这些年份或年代来索引某些行。这样,我们可以设置一个(或多个)新的索引。

正如loc和iloc,上述代码将返回一个series包含你所索引的行的数据。既然ix可以完成loc和iloc二者的工作,为什么还需要它们呢?最主要的原因是ix有一些轻微的不可预测性。还记得我说数字标签索引是ix的备选吗?数字标签可能会让ix做出一些奇怪的事情,例如将一个数字解释成一个位置。而loc和iloc则为你带来了安全的、可预测的、内心的宁静。然而必须指出的是,ix要比loc和iloc更快。

当你为一列数据设置了一个索引时,它们将不再是数据本身了。如果你想把索引设置为原始数据的形式,你可以使用和set_index相反的操作——reset_index。

这将返回数据原始的索引形式。

这会创建一个名为‘year‘的新列。这一列是由’water_year’列所导出的。它获取的是主年份。这便是使用apply的方法,即如何对一列应用一个函数。如果你想对整个数据集应用某个函数,你可以使用dataset.applymap()。操作一个数据集结构另一件经常会对dataframe所做的操作是为了让它们呈现出一种更便于使用的形式而对它们进行的重构。首先,groupby:

grouby所做的是将你所选择的列组成一组。上述代码首先将年代组成一组。虽然这样做没有给我们带来任何便利,但我们可以紧接着在这个基础上调用其它方法,例如max,min,mean等。例子中,我们可以得到90年代的均值。

你也可以对多行进行分组操作:

接下来的unstack操作可能起初有一些困惑。它的功能是将某一列前置成为列标签。我们最好如下看看它的实际效果。

我们再附加一个unstack操作。这次我们对’rain_octsep’索引的第1列操作:

现在,在我们下一个操作前,我们首先创造一个新的dataframe。

pivot实际上是在本文中我们已经见过的操作的组合。首先,它设置了一个新的索引(set_index()),然后它对这个索引排序(sort_index()),最后它会进行unstack操作。组合起来就是一个pivot操作。看看你能不能想想会发生什么:

注意到最后有一个.fillna(‘’)。这个pivot创造了许多空的或值为NaN的条目。我个人觉得我的dataframe被乱七八糟的NaN分散了注意力,所以使用了fillna(‘’)将他们变成了空字符串。你也可以输入任何你喜欢的东西,例如一个0。我们也可以使用函数dropna(how=’any’)来删除所有的带有NaN的行。然而在这个例子里,它可能会把所有东西都删了,所以我们没有这样做。

上述dataframe为我们展现了所有降雨量大于1250的年份中的总雨量。不可否认的是,这个并不是一个pivot的最好的示范,但是希望你能get到它的核心。看看你能在你自己的数据集中想出什么点子。合并数据集有时候你有两个单独的数据集,它们直接互相关联,而你想要比较它们的差异或者合并它们。没问题,Pandas可以很容易实现:

采用Pandas快速绘制图表Matplotlib很好用,但是想要画出一个中途下降的图表还是需要费一番功夫的。而有的时候你仅仅想要快速画出一个数据的大致走势来帮助你发掘搞清这些数据的意义。Pandas提供了plot函数满足你的需求:

这里非常轻松快速地利用plot画出了一个你的数据的图表。利用这个图表,你可以紧接着直观地发现深入挖掘的方向。例如,如果你看我画出的我数据的图表,你可以看到1995年英国可能发生了干旱。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180716A1R3ZQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券