pandas将含有多值的内容分拆成多行
2018-09-01 本文已影响0人
nummycode
在数据处理过程中,经常会遇到以下类型的数据:
image.png
在同一列中,本该分别填入多行中的数据,被填在一行里了,然而在分析的时候,需要拆分成为多行。
在上图中,列名为”Country” ,index为4和5的单元格内,值为”UK/Australia”和”UK/Netherland”。
解决办法
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
分为如下几步:
- 将含有多值的列进行拆分,然后通过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