这篇文章将为大家详细讲解有关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怎么将一列中的文本拆分为多行”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/tech/dev/237684.html