(6)Python初入坑之pandas基礎實操五
本節介紹數據的合併。
一、合併數據集
對於兩個數據集,有兩種形式。一種是增加列,把dataframe變得更寬,一種是增加行,把dataframe變得更長。
首先我們來創建data1 和 data2.
如果要使data1和data2橫向合併,也就是增加列,使其變寬,用merge()函數。如下:
使用on參數,來指定兩個列表根據哪一列來進行對齊匹配。
根據on參數,按照one列進行對齊匹配之後,兩個數據集找到了『a』和『b』進行對應,data1中根據『a』索引對應的值有三個,data2隻有一個10,則會形成三行。
而b,d等等這些數據一方有一方沒有,可以看出merge只取兩者都有的數據進行合併。
上述用法是兩個dataframe有相同的列,使用參數on即可匹配。那如果兩個沒有相同的列呢?
可以看出上述的兩個dataframe是沒有相同的列索引的,那我們如何合併呢?可以使用left_on= right_on= 參數來進行合併。
使用left和right的意思就是,左邊的數據取出one1,右邊的數據取出one2,根據這兩列進行匹配對齊,再合併。
如果兩個數據中,只有一列的名稱是相同的,其他都不同呢?pandas會很聰明的根據這一列相同的列索引進行匹配合併,代碼中都不需要寫入on=『one』,當然也可以自己手動設置匹配的列。如下:
以上兩個數據,只有one列是相同的,那麼我們不需要輸入on=one,pandas都可以默認按照這唯一相同索引的兩列進行匹配。
以上的merge()函數只取了兩個數據中可以匹配的數據,那如果我就是要把兩個數據的值都合併起來,匹配不到也不能拋棄,那怎麼辦呢?這個時候需要再添加限定參數how=outer。有一方匹配不到的值,就會返回NaN。如下:
假如我只要保存第一個dataframe的全部,第二個匹配不到的可以不要,那就用how=left。那如果只保存第二個dataframe的全部數據,第一個匹配不到的可以不用,那就用how=right。如下:
可以看出只保留了第data6中的abcd的取值,data5中的e,f都被拋棄了。
同理left也是一個道理。
使用left則保留了data5中的全部匹配到的數據,data6中的d,則被拋棄。
以上均為添加列,把dataframe變寬的用法。
那如果要把dataframe變長,添加行呢?可使用concat()函數。(百度翻譯merge和concat都是合併的意思嚶嚶嚶,看來要去翻一翻英英翻譯才能找到細微差別)
首先讓我們定義兩個data。
concat是默認以列索引對齊。data8是3行4列,data9是2行3列,其中能匹配到的列索引只有a,b,d,那在data9中匹配不到的c就會返回NaN值。
注意concat是以列表的形式把data8,data9傳輸進去。
可以看到,行索引是0,1,2,0,1,保留了之前兩個dataframe的索引。那如果我們想要使用pandas自動連續生成的索引,可以添加限定參數ignore_index=True。這樣可以忽略之前數據的行索引。
之前我們講到dataframe要增加新的列,直接賦值,增加一個Series就行。那如果要增加新的行呢?可以用append()函數。
順便回顧一下pandas實操一的內容。
推薦閱讀:
※(12)Python初入坑之案例分析二
※將Numpy datetime64類型日期進行格式轉換
※pandas dataFrame 繪圖函數—plot學習筆記
※Pandas學習-6concat合併
※如何與pandas愉快地玩耍(一)