一、 Explode 與 Pandas 的結緣
如果你熟悉 Pandas 的話,你應該知道它是 Python 中最重要的數據分析庫之一。而 Explode 方法,是 Pandas 中的一個超級重要的函數,可以幫助你將表格中的某個序列數據plit之後按照行的方式進行展開,我們可以非常輕鬆地將列表中的元素展開,形成新的一列,擴充對應的數據行。
import pandas as pd
df = pd.DataFrame({'A': [['a', 'b'], 'c', ['d', 'e', 'f']]})
df.explode('A')
二、 Explode 的基本使用
我們可以先生成一張樣例表,並且對表中某一列進行展開,比如以下代碼,我們展開了A列:
import pandas as pd
df = pd.DataFrame({'A': [[1, 2, 3], 'foo', [], [3, 4]]})
df.explode('A')
這裡我們傳入了’A’,表示要對表格中的A列進行展開。然後我們得到了以下結果:
A
0 1
0 2
0 3
1 foo
2 NaN
3 3
3 4
在這個例子中,我們成功地將列表中的元素展開,形成新的一列,擴充對應的數據行。需要注意的一點是,這個方法僅適用於 Pandas 的 series 格式,而不是 df 格式。
三、 Explode 的進階應用
1、當按行打散某一列或多列時,如果原來行中有 NaN,則該行將會被刪除,於是我們有一個神奇的方法可以去除 DataFrame 中某列的缺失值,僅保留非空項:
import pandas as pd
df = pd.DataFrame({'A': [['a', 'b'], 'c', [], ['d', 'e', 'f']]})
df = df.explode('A').reset_index(drop=True)
在這個例子中,由於原表中有一個空列表,我們想要丟棄該行,我們需要使用 dropna() 方法,如下所示:
import pandas as pd
df = pd.DataFrame({'A': [['a', 'b'], 'c', [], ['d', 'e', 'f']]})
df = df.dropna().explode('A').reset_index(drop=True)
2、當數據超過兩列時,數據的重複性變得相對較高。如果我們想要在某個 Series 值上對其他列進行比較,我們可以使用 explode。這是一種非常有用的方式,我們經常會使用到。下面是一個例子,我們將 A 列打散,並且通過比較 A 列的值和 B 列的值,來決定是否要保留該行數據:
import pandas as pd
df = pd.DataFrame({'A': [['a', 'b'], 'c', ['d', 'e', 'f']],
'B': ['y', 'x', 'y']})
df[df.apply(lambda x: x['B'] in x['A'], axis=1)].explode('A').reset_index(drop=True)
在這個例子中,我們通過篩選如果 B 內容在 A 列中展開的數據行,並重新排序索引。
四、 Explode 的競品介紹
只要稍微接觸過數據分析和處理,我們就知道與 Pandas 極其相似的 R 語言中也有類似的函數,名字同樣也是為「Explode」或者是「Unnest」,用法和 Pandas 上還是差不多的。如果您是初學者,無論是選擇 Pandas 還是 R 語言,通過這個函數操作 DataFrame 只是小兒科,相信使用 Explode 函數,無論是在數據清洗還是數據分析,都輕鬆愉悅!
五、Explode 的應用場景
我們可以把 Explode 函數想像成是一道閘門,將流進來的數據打散,更方便地對數據進行處理,下面羅列了幾個 Explode 的一些應用場景:
1、當我們的某個列是 list 類型時,通常情況下,我們需要將其展開到行上進行處理,或者根據這個 list,對應某些參數做處理,最後合併成一個更加完整的數據框。
2、有時候,我們需要對數據表進行多對多的關聯操作,比如我們想要通過某個欄位,將兩個數據表關聯起來,但是這個欄位在表中沒有單獨存在的一列,而是一個 list,我們就需要對其進行打散操作,然後再進行關聯操作,這時候,Explode 可以非常方便的做到這一點。
六、總結
以上就是 Explode 函數的詳細介紹以及使用方法。通過文章,我們了解了 Pandas 中這個重要的函數,並且對其有了深入的理解。希望這篇文章可以幫助大家在數據處理和分析的過程中,更加熟練的使用 Pandas,並且對 Explode 函數有更深層次的認識。
原創文章,作者:EGFQ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/150043.html