首页 > 代码库 > 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

分为如下几步:

  1. 将含有多值的列进行拆分,然后通过stack()方法进行变换,并通过index的设置来完成
  2. drop()方法从DataFrame中删除含有多值的列
  3. 然后用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