android webservices 返回多行多列数据,Pandas: 如何将一列中的文本拆分为多行?

本文和大家分享的主要是使用

Pandas

将一列中的文本拆分为多行相关内容,一起来看看吧,希望对大家

学习

Pandas

有所帮助。

在数据处理过程中,经常会遇到以下类型的数据:

f63194834fa6360949cf3757281be25e.png

在同一列中,本该分别填入多行中的数据,被填在一行里了,然而在分析的时候,需要拆分成为多行。

在上图中,列名为

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]:

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

闲谈

当然,将某列中含有多值的单元拆分成多行,还有其他方法,各位小伙伴们可以研究下

~~

来源:博客园

赞 | 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值