這篇文章將為大家詳細講解有關Pandas怎么將一列中的文本拆分為多行,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
在數據處理過程中,經常會遇到以下類型的數據:
在同一列中,本該分別填入多行中的數據,被填在一行里了,然而在分析的時候,需要拆分成為多行。
在上圖中,列名為"Country" ,index為4和5的單元格內,值為"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
分為如下幾步:
將含有多值的列進行拆分,然后通過 stack()方法進行變換,并通過index的設置來完成
用 drop()方法從DataFrame中刪除含有多值的列
然后用 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怎么將一列中的文本拆分為多行”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。