美文网首页我爱编程
[转]Pandas: 如何将一列中的文本拆分为多行?

[转]Pandas: 如何将一列中的文本拆分为多行?

作者: 我念东风终不负 | 来源:发表于2017-10-26 11:54 被阅读42次

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

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

在上图中,列名为"Country" ,index为4和5的单元格内,值为"UK/Australia"和"UK/Netherland"。

今天,我们来介绍将含有多值的内容分拆成多行的几种方法。

加载数据
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

分为如下几步:

  1. 将含有多值的列进行拆分,然后通过 stack()方法进行变换,并通过index的设置来完成
  2. 用 drop()方法从DataFrame中删除含有多值的列
  3. 然后用 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 列表转多行

    某df的列是多个字典组成的列表,样式如下,样式: 那么可以用如下方法转化 运行完成后,id_card对应的每一个字...

  • pandas参考文章

    Pandas中字符串和日期转换 Pandas新增一列并按条件赋值

  • 6. JavaScript开发中表格与表单技术(二)

    6.4 设置文本框 表单中的文本框分为单行文本框、多行文本框和密码框,它是表单中非常重要的对象,可以让用户自己 输...

  • DataFrame.value_counts, pandas1.

    value_counts在pandas早先版本中是pandas.Series的函数,功能是统计这一列Series中...

  • 多行多列变一列/一行

    1.一列转多列多行(或多行多列) a.先列后行,比如一列数据转为四列多行。 在目标区域第一个单元格B19输入以下公...

  • Hive行转列与列转行

    行转列 定义:多行转多列或者多行转一列 原始数据如下: 姓名科目分数小明语文90小明数学98小明英语95小红语文9...

  • 行列转换

    一行转多行 复制表格,然后右击鼠标选择转置复制 一列变多列 =IFERROR(OFFSET($A$2,IF(ROW...

  • 多行文本溢出显示省略号

    转 多行文本溢出显示省略号(…)全攻略-WEB前端开发

  • CSS居中问题合辑

    在CSS中,居中分为水平居中和垂直居中,在单行文本,多行文本和块级元素上,所使用的方法又不同 做一个小归纳,若您看...

网友评论

    本文标题:[转]Pandas: 如何将一列中的文本拆分为多行?

    本文链接:https://www.haomeiwen.com/subject/mmohpxtx.html