Pandas: 如何將一列中的文本拆分為多行? | Python
阿新 • • 發佈:2017-08-01
gid scene pmo lua ioe solid gige ble app
Pandas: 如何將一列中的文本拆分為多行?
在數據處理過程中,經常會遇到以下類型的數據:
在同一列中,本該分別填入多行中的數據,被填在一行裏了,然而在分析的時候,需要拆分成為多行。
在上圖中,列名為”Country” ,index為4和5的單元格內,值為”UK/Australia”和”UK/Netherland”。
今天,我們來介紹將含有多值的內容分拆成多行的幾種方法。
加載數據
PS:可以通過左右滑動來查看代碼
import pandas as pd
df = pd.DataFrame({‘Country‘ :[‘China‘,‘US‘,‘Japan‘,‘EU‘,‘UK/Australia‘, ‘UK/Netherland‘],
‘Number‘:[100, 150, 120, 90, 30, 2],
‘Value‘: [1, 2, 3, 4, 5, 6],
‘label‘: list(‘abcdef‘)})
df
Out[2]:
Country Number Value label
0 China 100 1 a
1 US 150 2 b
2 Japan 120 3 c
3 EU 90 4 d
4 UK/Australia 30 5 e
5 UK/Netherland 2 6 f
1 Method-1
分為如下幾步:
- 將含有多值的列進行拆分,然後通過
stack()
方法進行變換,並通過index的設置來完成 - 用
drop()
方法從DataFrame中刪除含有多值的列 - 然後用
join()
方法來合並
df.drop(‘Country‘ , axis=1).join(df[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=1, drop=True).rename(‘Country‘))
Out[3]:
Number Value label Country
0 100 1 a China
1 150 2 b US
2 120 3 c Japan
3 90 4 d EU
4 30 5 e UK
4 30 5 e Australia
5 2 6 f UK
5 2 6 f Netherland
過程分步介紹
df[‘Country‘].str.split(‘/‘, expand=True).stack()
Out[4]:
0 0 China
1 0 US
2 0 Japan
3 0 EU
4 0 UK
1 Australia
5 0 UK
1 Netherland
dtype: object
df[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=1, drop=True)
Out[5]:
0 China
1 US
2 Japan
3 EU
4 UK
4 Australia
5 UK
5 Netherland
dtype: object
df[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=1, drop=True).rename(‘Country‘)
Out[6]:
0 China
1 US
2 Japan
3 EU
4 UK
4 Australia
5 UK
5 Netherland
Name: Country, dtype: object
df.drop(‘Country‘, axis=1)
Out[7]:
Number Value label
0 100 1 a
1 150 2 b
2 120 3 c
3 90 4 d
4 30 5 e
5 2 6 f
2 Method-2
該方法的思路跟Method-1基本是一樣的,只是在具體的細節方面有些差異。代碼如下:
df[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=0).set_index(‘level_0‘).rename(columns={0:‘Country‘}).join(df.drop(‘Country‘, axis=1))
Out[8]:
Country Number Value label
0 China 100 1 a
1 US 150 2 b
2 Japan 120 3 c
3 EU 90 4 d
4 UK 30 5 e
4 Australia 30 5 e
5 UK 2 6 f
5 Netherland 2 6 f
過程分步介紹如下:
df[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=0)
Out[9]:
level_0 0
0 0 China
0 1 US
0 2 Japan
0 3 EU
0 4 UK
1 4 Australia
0 5 UK
1 5 Netherland
df[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=0).set_index(‘level_0‘)
Out[10]:
0
level_0
0 China
1 US
2 Japan
3 EU
4 UK
4 Australia
5 UK
5 Netherland
df[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=0).set_index(‘level_0‘).rename(columns={0:‘Country‘})
Out[11]:
Country
level_0
0 China
1 US
2 Japan
3 EU
4 UK
4 Australia
5 UK
5 Netherland
df.drop(‘Country‘, axis=1)
Out[12]:
Number Value label
0 100 1 a
1 150 2 b
2 120 3 c
3 90 4 d
4 30 5 e
5 2 6 f
3 閑談
當然,將某列中含有多值的單元拆分成多行,還有其他方法,各位小夥伴們可以研究下~~
本期推薦閱讀:
-
2017年上半年過去了,你讀了多少本書?
-
福布斯系列之數據分析思路篇
-
福布斯系列之數據采集
-
python求職Top10城市,來看看是否有你所在的城市
?
Pandas: 如何將一列中的文本拆分為多行? | Python