Pandas 基礎 (8) - 用 concat 組合 dataframe

Rachel發表於2019-03-24

以各個城市的天氣為例, 先準備下面的資料:

印度天氣的相關資訊:

import pandas as pd
india_weather = pd.DataFrame({
    'city': ['mumbai', 'delhi', 'banglore'],
    'temperature': [32, 34, 30],
    'humidity': [80, 60, 72]
})
india_weather

美國天氣的相關資訊:

us_weather = pd.DataFrame({
    'city': ['newyork', 'chicago', 'orlando'],
    'temperature': [21, 24, 32],
    'humidity': [68, 65, 70]
})
us_weather

用 concat 組合上面兩個 dataframe:

df = pd.concat([india_weather, us_weather])
df

輸出:

Pandas 基礎(8) - 用 concat 組合 dataframe

上面的輸出最左邊的序列號是重複的, 原因是資料分別來自兩個 dataframe 的索引值, 可以透過忽略原本的索引來做改變:

df = pd.concat([india_weather, us_weather], ignore_index=True)

還可以這樣輸出:

df = pd.concat([india_weather, us_weather], keys=['india', 'us'])

輸出:
Pandas 基礎(8) - 用 concat 組合 dataframe

由於上面設定了關鍵字, 所以就可以利用這個關鍵字獲取相關的資訊:

df.loc['india']

輸出:
Pandas 基礎(8) - 用 concat 組合 dataframe

從上面一系列的輸出可以看出, 這些組合都是縱向的組合, 那麼在實際應用中, 我們是經常需要做橫向組合的, 比如下面的例子:

temperature_df = pd.DataFrame({
    'city': ['newyork', 'chicago', 'orlando'],
    'temperature': [21, 24, 32],
})
windspeed_df = pd.DataFrame({
    'city': ['newyork', 'chicago', 'orlando'],
    'temperature': [7, 12, 9],
})

橫向組合:

df = pd.concat([temperature_df, windspeed_df], axis=1)

輸出:
Pandas 基礎(8) - 用 concat 組合 dataframe

從目前的輸出來看, 兩組資料對應的很好, 同一個城市都在同一行上, 那如果我們把資料來源改下:

windspeed_df = pd.DataFrame({
    'city': ['chicago', 'newyork'],
    'temperature': [12, 7],
})

我改動了關於風速的資料, 顛倒了城市的順序, 還刪掉了一個城市, 大家可以自己執行一下, 看到輸出的結果有點亂了. 遇到這種情況, 我們可以透過給原資料加索引的方式, 來設定資料的排序:

temperature_df = pd.DataFrame({
    'city': ['newyork', 'chicago', 'orlando'],
    'temperature': [21, 24, 32],
}, index=[0, 1, 2])

windspeed_df = pd.DataFrame({
    'city': ['chicago', 'newyork'],
    'temperature': [12, 7],
}, index=[1, 0])

輸出:
Pandas 基礎(8) - 用 concat 組合 dataframe

這樣資料順序就調好了.

下面再介紹一下 dataframe 與 series 的組合方式:

s = pd.Series(['Humidity', 'Dry', 'Rain'], name='event')

df = pd.concat([temperature_df, s], axis=1)

輸出:
Pandas 基礎(8) - 用 concat 組合 dataframe

以上就是關於 concat 的組合資料的一些常用方法啦, 下一篇會帶來更勁爆的組合方法, enjoy~~~

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章