基础了解(二)

参考资料:http://nbviewer.jupyter.org/github/LearnXu/pydata-notebook/tree/master/Chapter-05/

一、pandas中的数据结构

主要涉及到的库有以下

import pandas as pd
from pandas import Series, DataFrame

1、Series对象

series是一个像数组一样的一维序列,并有一个index的数组

obj = pd.Series([4, 7, -5, 3])
0    4
1    7
2   -5
3    3
dtype: int64
  • 如上所示,index和value都可以通过属性查看

# 查看value
obj.values
# 查看index
obj.index
  • 也可以自己指定index

  • 可以通过index作为索引取值

值得注意的是第二种索引的方式,是将一个列表作为索引,而返回的也是Series的对象

  • 其他操作

  • 其他使用Series的方式

值得注意的是,在使用index调整顺序的时候,如果index中包含字典中没有的值,那就是导致出现空值,也就是NaN

  • 数值相加

相加的原理是根据键,相同的键对应的值相加,若某个键只存在于一方,则得到的结果是NaN,也就是空

  • 名称

series的value和index都有一个name的属性,这个能和其他pandas的函数进行整合(??)

  • 直接修改index

2、DataFrame

DataFrame表示一个长方形,并包含排好序的列,每一列都可以是不同的数值类型。

dataframe也会想series一样自动生成index,而列会按顺序排好

  • 对于较大的数据,用head()方法来查看前五行

  • 生成DataFrame如果指定列的话,会按列指定的顺序排序

如果这时输入一个不存在的列名,对应一列的值全部为空

  • 查看列

  • 从DataFrame单独取出一列的话,就会变成series对象

据原文所说,这两种方式的区别在于,前者可以对应任何列名,而后者必须有效,但我测试结果却是两个都会报错,只要列名是无效的话。

  • 查看行

  • 修改整列的值

也可以把一个series的对象赋值过去,根据对应的index,若不存则为空。

如果列不存在的话,则会创建新的列

  • 删除一列

  • 可转置

  • 其他可转为DataFrame的格式

这里内层的字典的键会变成index的键名

  • 如果frame的index和column有name属性的话,也会被显示

3、索引对象

pandas中的索引除了保存index之外,还保存一些name的数据。

与python中的set不同的是,index允许重复的元素出现

在这种重复便签中选择的话,会选择所有相同的标签。

二、主要功能

1、重新索引

重新索引的意思就是将一个已经有索引的对象,修改其索引

如果没有对应的index的话为空

但是我感觉这没有什么意义,只是修改了索引的顺序,我原以为修改的是索引的键名,

  • 修改值

在处理时间序列这样的数据时,我们可能会需要在reindex的时候修改值,这时可以使用method

我完全不懂这个方法的作用是什么

对于DataFrame,reindex也可以修改row,columns的index。

  • 还可以使用loc

2、按轴删除记录

  • drop

对于series,drop会删除指定的轴的值,并且返回一个删除后的对象

对于dataframe,index可以按照行或列来删除

这里的axis参数,不是很理解具体什么作用

当只有一个值的时候,默认为axis=0,删除的是行,设置为axis=1之后,删除的列,同理,当参数是一个数组的时候,默认是行,添加axis=‘columns’之后,就是删除列。

3、索引,选择,过滤

  • series中的index相当于numpy中array的index,而且除了整数,还可以使用series的index

值得注意的是,使用series的切片的时候,它是会包含尾节点的,这点在其他很多相同的情况中也要注意尾节点的问题。

  • 对于DataFrame,index可以通过值或者序列,选中一个以上的列

  • 用loc和iloc来选择

这两个方法可以来选择行或列

索引函数也能用于切片

4、整数索引

新手使用整数来索引的话,总是出现一些问题,因为这与python的list和tuple的索引不太一样

为了保持连贯性,如果index中包含整数,那么选择数据的时候,为了更精确的地选择,使用loc或者ilco

5、算术和数据对齐

1、pandas有一个很有用的特点就是,不同index的对象之间的算术运算。如果两个对象相加,但是它们的index并不相同,最终的结果中的index是两个index的合集

跟之前提到过的一样,没有对应的index的话,值会变为NaN,因此引入了很多缺失值。

  • 在DataFrame中,数据对齐同时发生在行和列上

  • 如果两个DataFrame相加,而且没有column和row,结果会全是null

2、带填充值的算术方法

比方说上面的缺失值,我们希望填充0,

填充原本的值不是更好吗?填充0的话,还是会有部分值缺失的吧

  • 使用添加方法

  • 其他方法

3、dataframe和series之间的操作

运算中每一行都减去了arr[0],他说这个叫“broadcasting”,

如果一个index不在dataframe的column中,或者不在series的index中,那么结果也是合集,然后部分值为空

刚才是dataframe和行series进行算术操作,如果换做列,必须使用算术方法

6、函数应用和映射

numpy的数组方法也可以用在pandas的对象上

  • 另一个常用的操作时把一个用在一维数组上的函数,应用在一行或一列上,要用到dataframe中的apply函数

在frame中每一列,这个函数会被调用一次

我已经彻底晕了,不知道axis到底是行还是列

像sum或者mean这样的数组统计方法,dataframe中已经集成了,所以没必要用apply,apply不会返回标量,只会返回一个含有多个值的series

  • elemen-wise(点对点)的python函数也能用,比如要格式化frame中的浮点数,变为string,可以使用applymap

7、排序

  • 可以使用sort_index方法,返回一个新的对象

  • 对于dataframe,可以使用index或者其他axis来排序

  • 通过值来排序

np.nan指的是缺失值,也就是NaN,也就是空。

缺失值会被排在最后

  • 对于DataFrame,可以把一列或者多列作为sort keys

多个值排序的规则跟数据库中的很相似,先排第一个参数的列,然后排第二参数的列。

  • ranking是给有效的数据分配数字。

rank方法可以用于series和dataframe,它会默认给每个group一个平均排名。

懂倒是懂了,但是有什么用处呢?

对于dataframe可以根据行或列来计算rank

8、有重复label的轴索引

之前的例子都是唯一值的索引,一些pandas函数(reindex)需要label是唯一的,但这不是强制的

三、汇总和描述性统计

pandas有很多数学和统计方法,大部分可以归类为降维或汇总统计,可以用来从series中提取单个值(sum和mean),还有一些方法处理缺失值

这里应该是指处理数据,返回单个值,提取好像的感觉是拿出原有数据

计算的时候缺失值会被除外,可以使用skipna来跳过

其他方法

1、相关性和协方差

假设DataFrame时股价和股票数量,用pandas-datareader包能加载,如果没有可以用install下载

2、唯一值、值计数、会员

这里介绍从一维series中提取信息的方法

Last updated

Was this helpful?