Python學習筆記:pandas爆炸函數之explode


一、介紹

通過 explode 可以實現列轉行的功能。

explode 這個爆炸方法只能處理列表、元組、Series等類型。

二、實操

# 創建測試集
import pandas as pd
df = pd.DataFrame({'Name':['呂布','貂蟬','趙雲'],
                   'Hobby':[['打籃球','玩游戲','喝奶茶'],['敲代碼','看電影'],['聽音樂','健身']]})
'''
  Name            Hobby
0   呂布  [打籃球, 玩游戲, 喝奶茶]
1   貂蟬       [敲代碼, 看電影]
2   趙雲        [聽音樂, 健身]
'''

# 原地爆炸!!!
df.explode('Hobby')

# 列表有重復值 可能存在重復行
df.explode('Hobby').drop_duplicates().reset_index(drop=True)
'''
  Name Hobby
0   呂布   打籃球
1   呂布   玩游戲
2   呂布   喝奶茶
3   貂蟬   敲代碼
4   貂蟬   看電影
5   趙雲   聽音樂
6   趙雲    健身
'''

如果數據框中數據為非可爆炸的類型,則可提前進行分列操作。

df2 = pd.DataFrame({'Name':['呂布','貂蟬','趙雲'],
                   'Hobby':['打籃球,玩游戲,喝奶茶','敲代碼,看電影','聽音樂,健身']})
    
df2.explode('Hobby') # Not Work
df2['Hobby2'] = df2['Hobby'].str.split(',')
# df2['Hobby2'] = df2['Hobby'].apply(lambda x: x.split(','))
df2.explode('Hobby2')
'''
  Name        Hobby Hobby2
0   呂布  打籃球,玩游戲,喝奶茶    打籃球
0   呂布  打籃球,玩游戲,喝奶茶    玩游戲
0   呂布  打籃球,玩游戲,喝奶茶    喝奶茶
1   貂蟬      敲代碼,看電影    敲代碼
1   貂蟬      敲代碼,看電影    看電影
2   趙雲       聽音樂,健身    聽音樂
2   趙雲       聽音樂,健身     健身
'''

三、實踐題

  • 列轉行拆分爆炸
import pandas as pd
import numpy as np

df = pd.read_excel(r'C:\Users\Hider\Desktop\data.xlsx')

'''
   年級        姓名
0   1  A1;B1;C1
1   2  A2;B2;C2
2   3  A3;B3;C3
3   4  A4;B4;C4
4   5  A5;B5;C5
5   6  A6;B6;C6
6   7  A7;B7;C7
7   8  A8;B8;C8
8   9  A9;B9;C9
'''
df.columns # Index(['年級', '姓名'], dtype='object')
df['新列'] = df['姓名'].str.split(';')
df1 = df.explode('新列')
  • 還原
# 數據還原
def func(df):
    x = ','.join(df.values)
    return x

df2 = df1.groupby('年級').agg(func).reset_index()

參考鏈接:pandas100個騷操作五:使用 explode 實現 pandas 列轉行的 2 個常用技巧

參考鏈接:python pandas包的爆炸函數explode

參考鏈接:pandas.DataFrame.explode


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM