数据重构
1)concat()函数能够沿指定轴执行连接操作,同时对其他轴上的索引执行可选的集合运算(交集或并集)
pd.concat( objs,
axis=0,
join = 'outer',
ignore_index=False,
keys=None,
levels=None,
names=None,
verify_integrity = False,
copy = True,
)
objs:需要连接的Series或DataFrame对象列表或字典,如果传入的是字典,排序后的键将作为keys参数的值,除非 keys参数已经指定了,任何None对象都将被无声丢弃,如果他们全部都是None,在这种情况下,将会抛出 ValueError异常;
axis:(0,1,2,。。。),默认为0,沿着对应的轴进行连接;
join:{‘inner’,‘outer’},如何处理其他轴上的索引,默认为outer
。。。。。
今天的任务就是通过设置axis=1,实现对列的连接(上下连接),axis=0,实现对行的连接(左右连接)
2)使用append连接
append可以视为axis=0的,简单版concat,也就是说它只支持行拼接,同时比concat简便一些。这里要注意和concat的区别,concat是pd的属性,频pd.concat(),而append是对df的方法,df1.append(df2)
3)使用merge连接
merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=('_x','_y'),copy=True,indicator=Flase)
left,right:两个不同的DataFrame;
how:指的是合并(连接)的方式有inner(内连接)、left(左外连接)、right(右外连接)、outer(全外连 接),默认为inner;
on:指的是用于连接的列索引名称,必须存在左右两个DataFrame对象中,如果没有指定且其他参数也为指定则以两个DATa Frame的列名交集作为连接键
left_on:左则DataFrame中用作连接键的列名,这个参数中左右列名不相同,但代表的含义相同时非常有用。
right_on:左则DataFrame中用作连接键的列名
。。。。。
merge的特征:默认以重叠列名当作连接键、默认是INNer Join、可以多键连接,‘on’参数后传入多键列表即可、如果两个对象的列表不同,可以用left_on,right_on指定、也可以用行索引当连接键,使用参数left_index=True,righe_index=True,但这种情况下最好用JOIN。
4)使用Join连接
类似于append之于concat,join也可以理解为merge的一个简便并且特殊的方法,join也可以设置参数‘how’,只不过这里默认值不同,Merge中,‘how’默认值是‘inner’,join中的默认值‘left’
对比总结:(摘:多姆杨 记录pandas中多表合并(concat,append,merge,join)的一些问题)
1.concat和append可以实现的是表间‘拼接’,而merge和join则实现的标间‘合并’。区别在于是否基于‘键’来进行合并。如果只是简单地‘堆砌’,则用从cat和append比较合适,而如果遇到关联表,需要根据‘键’来合并,则用merge和join。
2.concatenate和merge是pandas的属性,所以调用时写成pd.concat()或者pd.merge();而append和join是DataFrame的方法,df.append()或者df.join()
3.append只能实现行拼接,从这个观点来看,concatenate的功能更加强大,理论上append可以完成的操作concat都可以完成,只需要更改相应的参数即可。
4.类似于append之于concat,join可以完成的操作merge也都可以完成,因此merge更加强大。
5.append和join存在的意义在于简洁和易用。
6.最关键地,concat后面的对于df的参数形式是objs,这个objs可以是一个列表或集合,里面可以有很多个df;而merge后面跟的参数形式是left和right,只有两个df。因此concat其实可以快速实现多表的拼接,而merge只能实现两表的合并。
stack方法可将列转为行;
GroupBy技术:在日常的数据分析中,经常需要将数据根据某个(多个)字段划分为不同的群体(Group)进行分析。groupby的过程就是将原有的DataFrame按照groupby的字段划分为若干个分组DataFrame,以后的一系列操作(agg、apply等),均是基于子DATa Frame操作的。
agg聚合操作:求和、均值、最大值、最小值等;
df = text['Fare'].groupby(text['Sex'])
list(df):可见将分组后对象进行list转化,可以看到分组情况;