Pandas怎么将一列中的文本拆分为多行

这篇文章将为大家详细讲解有关Pandas怎么将一列中的文本拆分为多行,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

 

 

在数据处理过程中,经常会遇到以下类型的数据:

在同一列中,本该分别填入多行中的数据,被填在一行里了,然而在分析的时候,需要拆分成为多行。

在上图中,列名为"Country" index45的单元格内,值为"UK/Australia""UK/Netherland"

今天,我们来介绍将含有多值的内容分拆成多行的几种方法。

加载数据

PS:可以通过左右滑动来查看代码

1.         import pandas as pd

2.          

3.         df = pd.DataFrame({'Country':['China','US','Japan','EU','UK/Australia', 'UK/Netherland'],

4.                     
 
'Number':[100, 150, 120, 90, 30, 2],

5.                     
 
'Value': [1, 2, 3, 4, 5, 6],

6.                     
 
'label': list('abcdef')})

7.         df

8.          

9.         Out[2]:

10.               Country  Number  Value label

11.      0          China     100      1     a

12.      1             US
   
150      2     b

13.      2          Japan     120      3     c

14.      3             EU
     
90      4     d

15.      4   UK/Australia      30      5     e

16.      5  UK/Netherland       2      6     f

1
Method-1

分为如下几步:

  1. 将含有多值的列进行拆分,然后通过 stack()方法进行变换,并通过index的设置来完成

  2.  drop()方法从DataFrame中删除含有多值的列

  3. 然后用 join()方法来合并

1.         df.drop('Country', axis=1).join(df['Country'].str.split('/', expand=True).stack().reset_index(level=1, drop=True).rename('Country'))

2.         Out[3]:

3.            Number  Value label     Country

4.         0     100      1     a       China

5.         1     150      2     b          US

6.         2     120      3     c       Japan

7.         3      90      4     d          EU

8.         4      30      5     e          UK

9.         4      30      5     e   Australia

10.      5       2      6     f          UK

11.      5       2      6     f  Netherland

过程分步介绍

1.         df['Country'].str.split('/', expand=True).stack()

2.         Out[4]:

3.         0  0         China

4.         1  0            US

5.         2  0         Japan

6.         3  0            EU

7.         4  0            UK

8.            1     Australia

9.         5  0            UK

10.         1    Netherland

11.      dtype:
object

12.       

13.      df['Country'].str.split('/', expand=True).stack().reset_index(level=1, drop=True)

14.      Out[5]:

15.      0         China

16.      1            US

17.      2         Japan

18.      3            EU

19.      4            UK

20.      4     Australia

21.      5            UK

22.      5    Netherland

23.      dtype:
object

24.       

25.      df['Country'].str.split('/', expand=True).stack().reset_index(level=1, drop=True).rename('Country')

26.      Out[6]:

27.      0         China

28.      1            US

29.      2         Japan

30.      3            EU

31.      4            UK

32.      4     Australia

33.      5            UK

34.      5    Netherland

35.      Name: Country, dtype:
object

36.       

37.      df.drop('Country', axis=1)

38.      Out[7]:

39.         Number  Value label

40.      0     100      1     a

41.      1     150      2     b

42.      2     120      3     c

43.      3      90      4     d

44.      4      30      5     e

45.      5       2      6     f

2
Method-2

该方法的思路跟Method-1基本是一样的,只是在具体的细节方面有些差异。代码如下:

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))

2.         Out[8]:

3.               Country  Number  Value label

4.         0       China     100      1     a

5.         1          US  
 
150      2     b

6.         2       Japan     120      3     c

7.         3          EU  
   
90      4     d

8.         4          UK  
   
30      5     e

9.         4   Australia      30      5     e

10.      5          UK  
   
2      6     f

11.      5  Netherland       2      6     f

过程分步介绍如下:

1.         df['Country'].str.split('/', expand=True).stack().reset_index(level=0)

2.         Out[9]:

3.            level_0        
 
0

4.         0        0       China

5.         0        1          US

6.         0        2       Japan

7.         0        3          EU

8.         0        4          UK

9.         1        4   Australia

10.      0        5          UK

11.      1        5  Netherland

12.       

13.      df['Country'].str.split('/', expand=True).stack().reset_index(level=0).set_index('level_0')

14.      Out[10]:

15.                  
     
0

16.      level_0
           

17.      0             China

18.      1            
   US

19.      2             Japan

20.      3            
   EU

21.      4            
   UK

22.      4         Australia

23.      5            
   UK

24.      5        Netherland

25.       

26.      df['Country'].str.split('/', expand=True).stack().reset_index(level=0).set_index('level_0').rename(columns={0:'Country'})

27.      Out[11]:

28.                  Country

29.      level_0
           

30.      0             China

31.      1            
   US

32.      2             Japan

33.      3            
   EU

34.      4            
   UK

35.      4         Australia

36.      5            
   UK

37.      5        Netherland

38.       

39.      df.drop('Country', axis=1)

40.      Out[12]:

41.         Number  Value label

42.      0     100      1     a

43.      1     150      2     b

44.      2     120      3     c

45.      3      90      4     d

46.      4      30      5     e

47.      5       2      6     f

关于“Pandas怎么将一列中的文本拆分为多行”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/tech/dev/237684.html

(0)
上一篇 2022年1月29日 13:12
下一篇 2022年1月29日 13:12

相关推荐

发表回复

登录后才能评论