首先我们将会介绍一下pandas的基本数据结构。包括数据类型/索引/轴的基本属性和常用操作。首先导入numpy和pandas。
脑海中时刻记着:数据内部默认是对齐的,标签和数据之间的link会一直存在,除非你明确破环了这种link。
我们将会简单介绍一下数据结构。
然后在各自的章节中再仔细介绍各个方法或方法。
### series
series是一维的标签数组,内部可以包含任何数据类型(整形,字符串,浮点型,python的对象等等)这个轴标签被统称为索引。创建一个series的基本方法如下
```
```
data可以是很多种类型:
一个python的字典
一个ndarray
一个标量
传进去的index是一个轴标签的列表。因此,依据data的不同会有下面几种情况
### from ndarry
如果data是ndarray,index的长度必须和ndarray相同,如果没有传入索引,会创建一个【0,。。。Len(data)-1】的一个列表
```
```
```
注意,pandas支持非unique索引的值,如果你试着做了一个不支持重复索引值的操作,系统也会报错。这样的原因是基于性能的考虑(计算当中的很多实例,比如Groupby的部分就没有用到索引)
### from dict
传入的data是一个字典类型,如果传入了index对象,那么字典中对应index的values将被拿出。否则,index默认是字典当中的sorted_keys。
```
```
```
note: NaN 是pandas中通用的缺失值标记
如果data是一个标量,index必须提供,value会根据index的长度自动重复补全。
```
In [10]: pd.Series(5.,index=['a','b','c','d','e'])Out[10]: a 5.0b 5.0c 5.0d 5.0e 5.0dtype: float64
```
### series 是ndarray-like
series的表现跟ndarray特别像,series也是一个对于大多Numpy 方法有效的参数,同时,index也支持分片操作。
```
```
点击这里查看array-based 索引
### series is dict-like
series很像一个固定大小的字典,你可以通过index label去查询和设置值
```
```
如果label没有包含进去,将会报错
```
```
使用get方法,一个缺失的label将会返回none或者规定的默认值
```
```
### 矢量化操作和标签对齐
在数据分析中,像numpy一样,没必要遍历serise的值去进行操作。同时series也可被传入大多需要传入ndarry的方法中
```
```
series 和 ndarray的关键区别在于 series和series直接的操作会自动根据label去对其数据,因此,当你在计算的时候不需要考虑series是否包含相同的label
```
```
非对齐series间的操作结果通常是包含所有index的一个并集,如果一个label在一个serise中没有找到,结果默认标记为Nan。不需要任何的数据对齐说明使得写代码更为自由和弹性。pandas集成的数据对齐的功能也是pandas区别与其他工具的原因。
note:通常我们取index的并集是为了防止信息丢失,及时数据是丢失的,但是有一个index仍然是十分重要的计算信息。当然你可以使用dropna方法去删除labels。
### name 属性
series有一个name属性
```
```
很多情况下series会自动命名,尤其是在你从DF对象中取出一个一维的切片。
通过rename方法可以重命名一个series
```
```
注意s和s2是两个不通的对象。
### DataFrame对象
DF是一个二维的数据结构,他的每一列都可以是不通的数据格式。想象一个电子表格或者一个sql表,或者一个包含series对象的dict。
df是pandas最常用的对象,同series一样,df接受多种类型的输入:
值为一维数组/列表/字典/Series的 一个字典
numpy.ndarry对象
结构化的ndarry
一个series对象
另外一个DF对象
随data一起,可以传入一个可选一个index/columns参数,如果传入了index/columns,产出的df对象一定会和传入的index/columns相同。因此,一个包含Series的dict和index同时传入的时候,默认会删掉所有没匹配到index的值。
axis labes即使没有传,他们也会根据输入的数据的常识规则生成。
### from dict of serise of dicts
生成的df结果的index是不同series的并集,如果包含嵌套的字典,被嵌套的字典首先会被转成Series格式。如果columns没有传的话,columns默认将会是字典key的有序列表。
```
```
查看df的index和columns属性可以看到row和column
笔记:如果传入了columns列表,会覆盖字典的keys
### from dict of ndarrays/lists
用于生成df对象的ndarrays长度必须相同,如果传入了index,也必须明确的与arrays的长度xiang'tong,如果没有传的话,默认会取range(n)
```
```
### From structured or record array
这和数组字典的例子是一样的
```
```
DataFrame并不打算真的像二维Numpy数组那样运行
### from alist of dicts
```
```
### from a dict of tuples
传入一个数组字典可生成一个多重索引结构
### From a serires
如果你是根据一个series对象生成的df,那么df的index/columns会跟series一样
####缺失数据
详细文档见Missing data章节,对于包含缺失数据的df对象的处理,使用np.nan方法。另外,你也可以传入numpy.MakedArray参数到DF的构造函数中,被标记的条目就会认为缺失。
### 其他的构造器
dataframe.from_dict
传入的参数是一个包含字典的字典。或者包含类数组的字典。它的所有操作都跟DataFrame构造器类似,除了orient参数(默认参数是columns)可以设置为index,这样就可以使用字典的key当作row label
dataFrame.from_records
出入的参数为元组列表/有组织的dtype类型。和正常的DF构造器操作起来一样。除了index可以说特殊的类型。举例如下
```
```
### DataFrame.from_items
DF 工作原理和from_dict的构造器一样(传入的参数说key,values的列表,key代表columns,values代表columns values).如果columns想要一个特殊的顺序的话,这将变的很有用,因为不需要在穿入一个columns的列表了。
```
```
如果出入的参数orient=‘index’,字典里面的key将会说row labels.但是在下面这个例子中,你必须传入你想要的columns names
```
```
### Columns selection,addition,deletion