语义上DF像一个包含一个(类索引的series对象),getting,setting,and deleteting 操作和字典一毛一样
```
```
Columns的删除和pop也是和字典一毛一样的
```
```
如果你查插入的series的index和df的index不一致,那么将会以df的index为准。
```
```
你也可以插入原生的ndarrays,但是他们的程度必须和DF的索引的长度相同。
默认情况下,columns的插入位置一般都在最后,insert方法可以设置中特定位置插入columns
### 声明新的列???(in method chains)
受dplyr的mtate动词启发,df有一个assign方式,可以让你轻松根据已有列创建一个衍生出来的新列
```
```
上面的例子演示的是插入一个预先计算好的值,我们也可以传一个可以被df执行的function作为参数。
```
```
assign返回一个原来数据的拷贝,与原来的数据是相互独立不影响的。
传入一个可被调用的方法,而不是真是的数据,在你暂时没有df的reference 的时候特别有用。尤其是在操作链中使用assign很常见。例如:我们可以只选SptaplLengh大于5的值计算利率和分布图。
```
```
传入的方法是在df被定义的时候才计算的。更重要的是,df是筛选后的df,先筛再计算的。这是一个我们没有df的reference的例子。
assign方法出入的参数是**kwargs.key是columns的名字,values是一个值/包含一个参数的function。返回的是一个df的copy。
warning:
因为assign的参数是**kwargs,是一个字典,所有结果中的new columns的顺序是无法保证的,默认按照key的字母顺序排列。
所有的表达式都是先计算再命名的。所以你不能在一个assign方法中使用另一个也是被命名的columns。比如:
```
```
indexing/ 选择
基本的indexing方法如下
行选择,例如。返回的是一个index是df的columns的Series对方。
```
```
关于indexing和切片的详情见section on indexing.关于原理层面的东西见section of reindexing .
###
不同的df对象会根据columns和index自动匹配。结果生成的对象是二者的并集。
```
```
当df和series对象操作的时候,会自动匹配series的index到df的columns。然后再把这个动作扩展到其他行。
```
```
当数据中含有time格式的serise,并且df的index包含时间,将会按照列扩展。
warning:
df - df['A']
目前不赞成这样,以后的版本会挪去。推荐的方式如下:
df.sub(df('A'),axis=0)
更多关于匹配和扩展的操作见flexible binary operations
```
```
当然也可以实现布尔操作
```
```
### 转置
使用T属性就可以了。和ndarray的T属性相同。
### 使用numpy的一些方法
numpy的一些元素智能的方法用在df身上完全没有问题,假设包含的数据是数值性的。
```
```
dot方法实现矩阵乘法
```
```
类似的,sries的dot方法完成的是dot结果
```
```
df设计的初衷并不是去取代ndarray的。这是因为df的索引语义会根据在矩阵中位置的不同有很大的区别。
### 控制台信息的输出
数据量很大的df对象会在展示的时候自动删减掉一部分再展示。info方法可以看df的概览情况。
使用to_string方法将会返回一个表格形式的字符串。虽然显示上面长度没有匹配到console
```
```
比较宽的df展示的时候将会折行。
设置display.width来空置每行展示多少。
设置display.max_colwidth来控制每列的显示长度。
通过expand_frame_repr选项来禁止上面的设置生效。显示出来的将会是一个块信息。
### df列属性的获取 和 ipython的自动补全。
如果df的列标签是一个有效的python变量名。可以通过获取属性的那种样式去获取数据
```
```
这些列也可以通过ipython中的自动补全。
### panel
警告:在0.20.0版本中,panel不赞成使用而且后期将会被取消。详见Deprecated Panel
panel某些程度上甚少用到,但仍是很重要的3维数据的容器。penel data是从计量经济学衍生出来的,也是跟pandas的名字相关的:pan(el)-da(ta)-s.3个轴的名字也是为了对包括panel数据的操作上面提供一些语义上的说明。然而,为了切片df对象,axis的名字有些被df独用了。
items: XXX
major_axis:XXX
minor_axis:XXX
Panel的构建方式正如你所期望的那样:
### from 3D ndarray
```
```
### from dict of DF objects
注意,字典中的values必须能转化为DF,因此,他们可以是上面任意一种有效的输入来生成DF
一个有用的工厂方法是 Panel.from_dict。参数为一个DF的字典。剩下的参数如下:
例如,与上面的构造方式来相比:
```
```
orient对与多类型的DF对象来说很有用,如果你传入的是一个包含多类型columns的df的字典,所有的数据都会当作dypte=object。除非你传入了参数 orient='minor'
注意:Panle使用频率不如series和df,在功能使用上常常被忽视,df中的很多方法还不能在Panel中使用。
### from df 使用to_panel方法
to_panel 把一个df对象转换成一个两级index的Panel对象。
```
```
# 元素的 选择/增加/删除
df的操作把他当作是一个包含series的字典。类似的。Panel就是一个包含df的字典。
the 增加和删除的API 和df一样。正如df一样,如果里面的元素是一个有效的python变量名,你可以通过像属性一样去获取它并且在ipython中完成自动补全。
### 转置
通过他的transpose方法可以重排列一个Panel对象
### 索引/选择
例如,使用前面的例子当中的数据,我们可以:
```
```
### 挤压
修改一个object的维度的另一个方式就是squeeze一个长度为1的对象。像wp['item']
```
```
### 转换成df
Panel也可以以2d的形式展现,即一个包含多层的index的df,点击这里。如果想要把一个Panel变成一个df,使用to_frame 方法:
```
```
### 一些反对的声音
过去几年pandas的在工具覆盖范围和使用深度方面都取得了很大的发展:引入了很多的特性,同时也支持更多的数据类型;也支持更多的方法使用。但是这些为了这些高效的索引和方法的运行使用而做的努力,也使得pandas的代码库渐渐开始变得分散化,同时也慢慢变得不易于理解。
Panle的3维数据结构与1维的series和2维的df有很大的不同。
相于其他类型的数据分析语言,Panel的三维结构比1-D的series或2-D的DataFrame代码量上要小得多。面向未来,pandas专注于这些数据分析领域是非常非常有意义的。
通常,您可以简单地使用多索引DataFrame来轻松处理更高维度的数据。
另外,xarray包也是一点一点构建起来的。特别是为了支持多维的数据分析,这也是panel一个常见用例。xarray和panel的相互转化详情见这里。
```
```
或者你也可以转成xarray 类型的DataArray
```
```
完整文档见这里。
### Panel 4D 和 ND (不建议)
### 警告:
在0.19.0 Panel4D和ND是不建议使用,并且在以后的版本中会被移除。推荐用xrray包来表示多维的数据。pandas提供了一个to_xarray方法来自动完成转换。
更之前的版本文档见这里。