千家信息网

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

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章将为大家详细讲解有关Pandas怎么将一列中的文本拆分为多行,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在数据处理过程中,经常会遇到以下类型的数据:在同一
千家信息网最后更新 2024年09月22日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怎么将一列中的文本拆分为多行"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0