Series实现了一维数据的储存和操作,而DataFrame则完成了二维数据储存,有人将其翻译为“数据框”。实际上,DataFrame可以认为是Series的Series。下面的代码依然默认已经导入了Pandas库。
1、DataFrame是Series的Series
虽然代码编辑器将s1竖排显示,但我们也可以看做是横排显示的,这样有利于认识DataFrame,将s1定义中的"xx"、“yy”、“zz”用List来替换,并增加了内容,就可以得到d1。
更显然地,使用字典套字典的形式来定义DataFrame对象,能够更加清楚地看到DataFrame是Series的Series这一特性:
d1声明时没有指定index,因此默认是0开始的数字
2、DataFrame的下标
d2对象中,a、b、c构成了它的列标签(columns),i、ii、iii构成了它的行标签(index),这就是为什么要将Series横排来看的原因。DataFrame中使用Series储存一个个的Series,一列就是一个子Series。
使用字典套字典的方式定义DataFrame,index要多次出现,十分不方便,Pandas提供了修改index的方法
值得注意的是,columns的标签并不能修改,但可以拓展,未知数据用NaN表示。但此时index不能拓展,如果需要拓展,dic1需要使用字典套字典的形式来定义。
此时columns和index都可以拓展
3、DataFrame的值拷贝
上面的代码都是用字典来定义一个DataFrame对象。DataFrame可以通过columns和index来抽取另外一个DataFrame的数据:
正如上面所说,DataFrame是Series的Series,因此可以通过columns标签获取子Series:
s1就是一个Series,可以通过d2直接访问Series的元素:
同样,DataFrame也可以做像Series那样的运算:
DataFrame也可以以Series为单位来赋值:
这为d2增加了一列d,并且ii行没有值,因此用NaN填充
当然,也可以精确赋值(可以被赋值为None):
也可以执行del来删除一列