數(shù)據(jù)重構(gòu)
1)concat()函數(shù)能夠沿指定軸執(zhí)行連接操作,同時對其他軸上的索引執(zhí)行可選的集合運算(交集或并集)
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參數(shù)的值,除非? ? ? ? ?keys參數(shù)已經(jīng)指定了毒返,任何None對象都將被無聲丟棄租幕,如果他們?nèi)慷际荖one,在這種情況下,將會拋出? ? ? ? ? ? ? ? ValueError異常拧簸;
axis:(0劲绪,1,2盆赤,贾富。。弟劲。)祷安,默認為0,沿著對應(yīng)的軸進行連接兔乞;
join:{‘inner’汇鞭,‘outer’},如何處理其他軸上的索引庸追,默認為outer
霍骄。。淡溯。读整。。
今天的任務(wù)就是通過設(shè)置axis=1咱娶,實現(xiàn)對列的連接(上下連接)米间,axis=0强品,實現(xiàn)對行的連接(左右連接)
2)使用append連接
? ?append可以視為axis=0的,簡單版concat屈糊,也就是說它只支持行拼接的榛,同時比concat簡便一些。這里要注意和concat的區(qū)別逻锐,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(內(nèi)連接)、left(左外連接)盏档、right(右外連接)凶掰、outer(全外連? ?接),默認為inner妆丘;
on:指的是用于連接的列索引名稱锄俄,必須存在左右兩個DataFrame對象中,如果沒有指定且其他參數(shù)也為指定則以兩個DATa Frame的列名交集作為連接鍵
left_on:左則DataFrame中用作連接鍵的列名勺拣,這個參數(shù)中左右列名不相同,但代表的含義相同時非常有用鱼填。
right_on:左則DataFrame中用作連接鍵的列名
药有。。苹丸。愤惰。。
merge的特征:默認以重疊列名當作連接鍵赘理、默認是INNer Join宦言、可以多鍵連接,‘on’參數(shù)后傳入多鍵列表即可商模、如果兩個對象的列表不同奠旺,可以用left_on,right_on指定、也可以用行索引當連接鍵施流,使用參數(shù)left_index=True,righe_index=True,但這種情況下最好用JOIN响疚。
4)使用Join連接
類似于append之于concat,join也可以理解為merge的一個簡便并且特殊的方法瞪醋,join也可以設(shè)置參數(shù)‘how’忿晕,只不過這里默認值不同,Merge中银受,‘how’默認值是‘inner’践盼,join中的默認值‘left’
對比總結(jié):(摘:多姆楊 記錄pandas中多表合并(concat鸦采,append,merge咕幻,join)的一些問題)
1.concat和append可以實現(xiàn)的是表間‘拼接’渔伯,而merge和join則實現(xiàn)的標間‘合并’。區(qū)別在于是否基于‘鍵’來進行合并谅河。如果只是簡單地‘堆砌’咱旱,則用從cat和append比較合適,而如果遇到關(guān)聯(lián)表绷耍,需要根據(jù)‘鍵’來合并吐限,則用merge和join。
2.concatenate和merge是pandas的屬性褂始,所以調(diào)用時寫成pd.concat()或者pd.merge();而append和join是DataFrame的方法诸典,df.append()或者df.join()
3.append只能實現(xiàn)行拼接,從這個觀點來看崎苗,concatenate的功能更加強大狐粱,理論上append可以完成的操作concat都可以完成,只需要更改相應(yīng)的參數(shù)即可胆数。
4.類似于append之于concat肌蜻,join可以完成的操作merge也都可以完成,因此merge更加強大必尼。
5.append和join存在的意義在于簡潔和易用蒋搜。
6.最關(guān)鍵地,concat后面的對于df的參數(shù)形式是objs判莉,這個objs可以是一個列表或集合豆挽,里面可以有很多個df;而merge后面跟的參數(shù)形式是left和right券盅,只有兩個df帮哈。因此concat其實可以快速實現(xiàn)多表的拼接,而merge只能實現(xiàn)兩表的合并锰镀。
stack方法可將列轉(zhuǎn)為行娘侍;
GroupBy技術(shù):在日常的數(shù)據(jù)分析中,經(jīng)常需要將數(shù)據(jù)根據(jù)某個(多個)字段劃分為不同的群體(Group)進行分析互站。groupby的過程就是將原有的DataFrame按照groupby的字段劃分為若干個分組DataFrame私蕾,以后的一系列操作(agg、apply等)胡桃,均是基于子DATa Frame操作的踩叭。
agg聚合操作:求和、均值、最大值容贝、最小值等自脯;
df = text['Fare'].groupby(text['Sex'])
list(df):可見將分組后對象進行l(wèi)ist轉(zhuǎn)化,可以看到分組情況斤富;