首页 > 代码库 > Pandas: 如何将一列中的文本拆分为多行? | Python
Pandas: 如何将一列中的文本拆分为多行? | Python
Pandas: 如何将一列中的文本拆分为多行?
在数据处理过程中,经常会遇到以下类型的数据:
在同一列中,本该分别填入多行中的数据,被填在一行里了,然而在分析的时候,需要拆分成为多行。
在上图中,列名为”Country” ,index为4和5的单元格内,值为”UK/Australia”和”UK/Netherland”。
今天,我们来介绍将含有多值的内容分拆成多行的几种方法。
加载数据
PS:可以通过左右滑动来查看代码
import pandas as pddf = 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‘)})dfOut[2]: Country Number Value label0 China 100 1 a1 US 150 2 b2 Japan 120 3 c3 EU 90 4 d4 UK/Australia 30 5 e5 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 Country0 100 1 a China1 150 2 b US2 120 3 c Japan3 90 4 d EU4 30 5 e UK4 30 5 e Australia5 2 6 f UK5 2 6 f Netherland
过程分步介绍
df[‘Country‘].str.split(‘/‘, expand=True).stack()Out[4]:0 0 China1 0 US2 0 Japan3 0 EU4 0 UK 1 Australia5 0 UK 1 Netherlanddtype: objectdf[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=1, drop=True)Out[5]:0 China1 US2 Japan3 EU4 UK4 Australia5 UK5 Netherlanddtype: objectdf[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=1, drop=True).rename(‘Country‘)Out[6]:0 China1 US2 Japan3 EU4 UK4 Australia5 UK5 NetherlandName: Country, dtype: objectdf.drop(‘Country‘, axis=1)Out[7]: Number Value label0 100 1 a1 150 2 b2 120 3 c3 90 4 d4 30 5 e5 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 label0 China 100 1 a1 US 150 2 b2 Japan 120 3 c3 EU 90 4 d4 UK 30 5 e4 Australia 30 5 e5 UK 2 6 f5 Netherland 2 6 f
过程分步介绍如下:
df[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=0)Out[9]: level_0 00 0 China0 1 US0 2 Japan0 3 EU0 4 UK1 4 Australia0 5 UK1 5 Netherlanddf[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=0).set_index(‘level_0‘)Out[10]: 0level_0 0 China1 US2 Japan3 EU4 UK4 Australia5 UK5 Netherlanddf[‘Country‘].str.split(‘/‘, expand=True).stack().reset_index(level=0).set_index(‘level_0‘).rename(columns={0:‘Country‘})Out[11]: Countrylevel_0 0 China1 US2 Japan3 EU4 UK4 Australia5 UK5 Netherlanddf.drop(‘Country‘, axis=1)Out[12]: Number Value label0 100 1 a1 150 2 b2 120 3 c3 90 4 d4 30 5 e5 2 6 f
3 闲谈
当然,将某列中含有多值的单元拆分成多行,还有其他方法,各位小伙伴们可以研究下~~
本期推荐阅读:
2017年上半年过去了,你读了多少本书?
福布斯系列之数据分析思路篇
福布斯系列之数据采集
python求职Top10城市,来看看是否有你所在的城市
?
Pandas: 如何将一列中的文本拆分为多行? | Python
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。