1、分层索引
在pandas包中,我们利用set_index方法可以设置多层索引。
import pandas as pd
frame = pd.DataFrame({'a':range(7),'b':range(7,0,-1),
'c':['one','one','one','two','two',
'two','two'],
'd':[0,1,2,0,1,2,3]})
frame2 = frame.set_index(['c','d'])
frame2
输出
又可以将分层索引的索引层移动到对应的列中,即set_index反操作。
frame2.reset_index()
输出
2、数据连接与合并
pandas中,数据按行连接可以使用merge
df1 = pd.DataFrame({'key':['b','b','a','c','a','a','b'],
'data1':range(7)})
df2 = pd.DataFrame({'key':['a','b','d'],
'data2':range(3)})
pd.merge(df1,df2)#默认按索引为链接的键 需要加on=‘key’
输出
再输入
pd.merge(df1,df2,on='key')
输出结果与上图相同
由上图可以看出缺少c,d类型的分类,因为merge默认为inner连接(即交集),需要改为outer连接(即并集)。
pd.merge(df1,df2,how='outer')
输出
如果一个DataFrame中的值想与另一个DF中的索引互相匹配,可以使用merge中参数left_on或者right_on(看前者需要匹配的键在left还是right),同时我对于后一个DataFrame中的索引想要合并,可以添加参数right_index 或 left_index。
#表示索引需要作为用来合并的键
pd.merge(left1, right1, left_on='key', right_index=True)#如果需要两边索引都合并 则都为true
#也可以使用join进行连接
输出
pandas中concat是纵轴连接DataFrame。其中参数ignore_index如果为True,则是不沿着连接轴保留索引,是产生一段新的(长度为total_length)的索引。
import numpy as np
df3 = pd.DataFrame(np.random.randn(3,4), columns=['a','b','c','d'])
df4 = pd.DataFrame(np.random.randn(2,3), columns=['b','d','a'])
pd.concat([df3,df4], ignore_index=True, sort=True)#ignore_index不沿着连接轴保留索引,而产生一段新的(长度为total_length)的索引
#sort需为TRUE 否则会报错
输出
combine_first方法可以认为它是根据你传入的对象来“修补”调用对象的缺失值。
df5 = pd.DataFrame({'a':[1,np.nan,5,np.nan],
'b':[np.nan,2,np.nan,6],
'c':range(2,18,4)})
df6 = pd.DataFrame({'a':[5,4,np.nan,3,7],
'b':[np.nan,3,4,6,8]})
df5.combine_first(df6)#df6修补df5
输出
3、重塑与透视
pandas中运用melt方法可以变换为新的DataFrame 将多列合并成一列 产生新的DataFrame。
melted = pd.melt(df,['key'])#必须指明哪些列是分组指标
melted #相当于把ABC整合到一列中
输出
以上就是该书第八章我认为重要知识点总结,如果有错误之处还请指出。