本文的主要内容是基于中国大学mooc(慕课)中的“Python数据分析与可视化”课程进行整理和总结。
改变Series和DataFrame对象。
- 增加或重排:重新索引
使用.reindex()能够改变或重排Series和DataFrame索引。
d.reindex(index=['c5','c4','c3','c2','c1'])
城市 环比 同比 定基
c5 沈阳 100.5 120.1 122.3
c4 深圳 100.9 119.5 1210.0
c3 广州 101.3 120.1 122.4
c2 上海 101.2 120.6 122.5
c1 北京 101.5 120.7 121.4
d.reindex(columns=['定基','同比','环比','城市'])
定基 同比 环比 城市
c1 121.4 120.7 101.5 北京
c2 122.5 120.6 101.2 上海
c3 122.4 120.1 101.3 广州
c4 1210.0 119.5 100.9 深圳
c5 122.3 120.1 100.5 沈阳
可以看到,通过使用reindex可以改变横向索引和横向colums的顺序关系。
.reindex(index=None,columns=None,…)的参数
参数 | 说明 |
---|---|
index,columns | 新的行列自定义索引 |
fill_value | 重新索引中,用于填充缺失位置的值 |
method | 填充方法,ffill当前值向前填充,bfill向后填充 |
limit | 最大填充量 |
copy | 默认True,生成新的对象,False时,新旧相等不复制 |
d = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5,101.2,101.3,100.9,100.5],
'同比':[120.7,120.6,120.1,119.5,120.1],
'定基':[121.4,122.5,122.4,1210,122.3]}
d = pd.DataFrame(d,index=['c1','c2','c3','c4','c5'])
d
城市 环比 同比 定基
c1 北京 101.5 120.7 121.4
c2 上海 101.2 120.6 122.5
c3 广州 101.3 120.1 122.4
c4 深圳 100.9 119.5 1210.0
c5 沈阳 100.5 120.1 122.3
newc = d.columns.insert(4,'新增')
newd = d.reindex(columns=newc,fill_value=200)
newd
城市 环比 同比 定基 新增
c1 北京 101.5 120.7 121.4 200
c2 上海 101.2 120.6 122.5 200
c3 广州 101.3 120.1 122.4 200
c4 深圳 100.9 119.5 1210.0 200
c5 沈阳 100.5 120.1 122.3 200
对于Series和DataFrame来说,索引都是Index类型,Index对象是不可修改的类型。对索引类型的常用操作有如下方法。
方法 | 说明 |
---|---|
.append(idx) | 连接一个index对象,生成一个新的index对象 |
.difference(idx) | 计算差集,产生新的index对象 |
.intersection(idx) | 计算交集 |
.union (idx) | 计算并集 |
.delete(loc) | 删除位置loc处的元素 |
.insert(loc,e) | 在位置loc处增加一个元素e |
d = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5,101.2,101.3,100.9,100.5],
'同比':[120.7,120.6,120.1,119.5,120.1],
'定基':[121.4,122.5,122.4,1210,122.3]}
d = pd.DataFrame(d,index=['c1','c2','c3','c4','c5'])
d
城市 环比 同比 定基
c1 北京 101.5 120.7 121.4
c2 上海 101.2 120.6 122.5
c3 广州 101.3 120.1 122.4
c4 深圳 100.9 119.5 1210.0
c5 沈阳 100.5 120.1 122.3
d.columns.delete(2)
Index(['城市', '环比', '定基'], dtype='object')
d.columns会返回d对应1轴上的索引,是一个Index对象,d.columns.delete(2)表示返回删除1轴第二个索引后的索引对象,同理可以得到我们可以使用inesert方法在指定位置新增索引并返回更改后的索引对象:
d.index.insert(5,'c6')
Index(['c1', 'c2', 'c3', 'c4', 'c5', 'c6'], dtype='object')
再看一个例子:
d = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5,101.2,101.3,100.9,100.5],
'同比':[120.7,120.6,120.1,119.5,120.1],
'定基':[121.4,122.5,122.4,1210,122.3]}
d = pd.DataFrame(d,index=['c1','c2','c3','c4','c5'])
d
城市 环比 同比 定基
c1 北京 101.5 120.7 121.4
c2 上海 101.2 120.6 122.5
c3 广州 101.3 120.1 122.4
c4 深圳 100.9 119.5 1210.0
c5 沈阳 100.5 120.1 122.3
newc = d.columns.delete(2)
newc
Index(['城市', '环比', '定基'], dtype='object')
newi = d.index.insert(5,'c6')
newi
newi
Index(['c1', 'c2', 'c3', 'c4', 'c5', 'c6'], dtype='object')
nd = d.reindex(index=newi,columns=newc).ffill()
nd
城市 环比 定基
c1 北京 101.5 121.4
c2 上海 101.2 122.5
c3 广州 101.3 122.4
c4 深圳 100.9 1210.0
c5 沈阳 100.5 122.3
c6 沈阳 100.5 122.3
此时要注意,如果使用method='ffill’会报错,网上查了一下也没有找到具体什么原因,后续使用method进行填充时建议使用上述方法。
删除:drop
d = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5,101.2,101.3,100.9,100.5],
'同比':[120.7,120.6,120.1,119.5,120.1],
'定基':[121.4,122.5,122.4,1210,122.3]}
d = pd.DataFrame(d,index=['c1','c2','c3','c4','c5'])
d
城市 环比 同比 定基
c1 北京 101.5 120.7 121.4
c2 上海 101.2 120.6 122.5
c3 广州 101.3 120.1 122.4
c4 深圳 100.9 119.5 1210.0
c5 沈阳 100.5 120.1 122.3
d.drop('c1')
城市 环比 同比 定基
c2 上海 101.2 120.6 122.5
c3 广州 101.3 120.1 122.4
c4 深圳 100.9 119.5 1210.0
c5 沈阳 100.5 120.1 122.3
d.drop('环比',axis=1)
城市 同比 定基
c1 北京 120.7 121.4
c2 上海 120.6 122.5
c3 广州 120.1 122.4
c4 深圳 119.5 1210.0
c5 沈阳 120.1 122.3
注意,当对DataFrame类型进行删除行轴索引操作时,因为axis默认为0,需要增加一个axis=1的指令。