一、介紹
通過 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 個常用技巧