溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Pandas怎么將一列中的文本拆分為多行

發(fā)布時(shí)間:2021-11-30 10:40:32 來(lái)源:億速云 閱讀:299 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Pandas怎么將一列中的文本拆分為多行,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

 

 

在數(shù)據(jù)處理過(guò)程中,經(jīng)常會(huì)遇到以下類型的數(shù)據(jù):

在同一列中,本該分別填入多行中的數(shù)據(jù),被填在一行里了,然而在分析的時(shí)候,需要拆分成為多行。

在上圖中,列名為"Country" ,index45的單元格內(nèi),值為"UK/Australia""UK/Netherland"

今天,我們來(lái)介紹將含有多值的內(nèi)容分拆成多行的幾種方法。

加載數(shù)據(jù)

PS:可以通過(guò)左右滑動(dòng)來(lái)查看代碼

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. 將含有多值的列進(jìn)行拆分,然后通過(guò) stack()方法進(jìn)行變換,并通過(guò)index的設(shè)置來(lái)完成

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

  3. 然后用 join()方法來(lái)合并

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

過(guò)程分步介紹

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基本是一樣的,只是在具體的細(xì)節(jié)方面有些差異。代碼如下:

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

過(guò)程分步介紹如下:

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

關(guān)于“Pandas怎么將一列中的文本拆分為多行”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI