Pandas学习之文本拆分
来源:互联网 发布:淘宝劳模代购 编辑:程序博客网 时间:2024/05/19 02:17
本文和大家分享的主要是使用Pandas将一列中的文本拆分为多行相关内容,一起来看看吧,希望对大家学习Pandas有所帮助。
在数据处理过程中,经常会遇到以下类型的数据:
在同一列中,本该分别填入多行中的数据,被填在一行里了,然而在分析的时候,需要拆分成为多行。
在上图中,列名为”Country” ,index为4和5的单元格内,值为”UK/Australia”和”UK/Netherland”。
下面,我们来扒一扒将含有多值的内容分拆成多行的几种方法。
加载数据
PS:可以通过左右滑动来查看代码
import pandas as pd
df = pd.DataFrame({'Country':['China','US','Japan','EU','UK/Australia', 'UK/Netherland'],
'Number':[100, 150, 120, 90, 30, 2],
'Value': [1, 2, 3, 4, 5, 6],
'label': list('abcdef')})
df
Out[2]:
Country Number Value label
0 China 100 1 a
1 US 150 2 b
2 Japan 120 3 c
3 EU 90 4 d
4 UK/Australia 30 5 e
5 UK/Netherland 2 6 f
1 Method-1
分为如下几步:
将含有多值的列进行拆分,然后通过 stack() 方法进行变换,并通过index的设置来完成
用 drop() 方法从DataFrame中删除含有多值的列
然后用 join() 方法来合并
df.drop('Country', axis=1).join(df['Country'].str.split('/', expand=True).stack().reset_index(level=1, drop=True).rename('Country'))
Out[3]:
Number Value label Country
0 100 1 a China
1 150 2 b US
2 120 3 c Japan
3 90 4 d EU
4 30 5 e UK
4 30 5 e Australia
5 2 6 f UK
5 2 6 f Netherland
过程分步介绍
df['Country'].str.split('/', expand=True).stack()
Out[4]:
0 0 China
1 0 US
2 0 Japan
3 0 EU
4 0 UK
1 Australia
5 0 UK
1 Netherland
dtype: object
df['Country'].str.split('/', expand=True).stack().reset_index(level=1, drop=True)
Out[5]:
0 China
1 US
2 Japan
3 EU
4 UK
4 Australia
5 UK
5 Netherland
dtype: object
df['Country'].str.split('/', expand=True).stack().reset_index(level=1, drop=True).rename('Country')
Out[6]:
0 China
1 US
2 Japan
3 EU
4 UK
4 Australia
5 UK
5 Netherland
Name: Country, dtype: object
df.drop('Country', axis=1)
Out[7]:
Number Value label
0 100 1 a
1 150 2 b
2 120 3 c
3 90 4 d
4 30 5 e
5 2 6 f
2 Method-2
该方法的思路跟Method-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))
Out[8]:
Country Number Value label
0 China 100 1 a
1 US 150 2 b
2 Japan 120 3 c
3 EU 90 4 d
4 UK 30 5 e
4 Australia 30 5 e
5 UK 2 6 f
5 Netherland 2 6 f
过程分步介绍如下:
df['Country'].str.split('/', expand=True).stack().reset_index(level=0)
Out[9]:
level_0 0
0 0 China
0 1 US
0 2 Japan
0 3 EU
0 4 UK
1 4 Australia
0 5 UK
1 5 Netherland
df['Country'].str.split('/', expand=True).stack().reset_index(level=0).set_index('level_0')
Out[10]:
0
level_0
0 China
1 US
2 Japan
3 EU
4 UK
4 Australia
5 UK
5 Netherland
df['Country'].str.split('/', expand=True).stack().reset_index(level=0).set_index('level_0').rename(columns={0:'Country'})
Out[11]:
Country
level_0
0 China
1 US
2 Japan
3 EU
4 UK
4 Australia
5 UK
5 Netherland
df.drop('Country', axis=1)
Out[12]:
Number Value label
0 100 1 a
1 150 2 b
2 120 3 c
3 90 4 d
4 30 5 e
5 2 6 f
3 闲谈
当然,将某列中含有多值的单元拆分成多行,还有其他方法,各位小伙伴们可以研究下~~
来源:博客园
- Pandas学习之文本拆分
- 【数据平台】pandas将一列中的文本拆分成多行
- python之pandas学习
- pandas学习之合并merge
- Pandas 基本文本数据处理
- python 数据处理学习pandas之DataFrame(一)
- python 数据处理学习pandas之DataFrame(二)
- python 数据处理学习pandas之DataFrame(三)
- python机器学习库入门之pandas
- Python数据分析之pandas学习
- Pandas学习笔记之重复数据统计
- Pandas学习笔记之操作Excel
- Pandas学习笔记之列操作
- Pandas学习笔记之合并操作
- python库之pandas简要学习
- python 学习语法之pandas添加行
- python之pandas库学习常用函数
- Python数据分析之pandas学习
- C++多态分析
- Stockbroker Grapevine (弗洛伊德)
- POJ 2421 Constructing Roads
- 练习 2-2 在不使用运算符&&或||的条件下编写一个与上面的for 循环语句等价的循环语句。
- 51nod 1212 模板
- Pandas学习之文本拆分
- [LintCode]Compare Strings(C++|Python)
- Spring相关部分注解的用法:
- spark 调度模块详解及源码分析
- C++OJ提交题目中的语言选项里G++与C++的区别
- js数组去重
- jquery中的attr()和prop()的区别
- PAT---1021. 个位数统计 (15)
- 1、在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。设计一个算法,找出出现次数最多的数字。