【问题标题】:split only 1 column to 2 but keeping others pandas python仅将 1 列拆分为 2 列,但保留其他 pandas python
【发布时间】:2017-05-12 23:00:00
【问题描述】:

我有一个样本数据:

import pandas as pd
d = {
 'unit': ['001 peds', '002 peds1', '003 4U', '004 4U1', '005 MS'],
 'N-D': ['Numerator', 'Denominator', 'Numerator', 'Denominator', 'Numerator'],
 'value': [0, 1, 0, 1, 0],

}
df = pd.DataFrame(d)

看起来像这样:

    N-D       unit        value
Numerator     001 peds      0
Denominator   002 peds1     1
Numerator     003 4U        0
Denominator   004 4U1       1
Numerator     005 MS        0

我想用空格将“单位”列分成 2:“” 我的代码:

df1 = df['unit'].str.split(" ", expand=True)

输出是:

  0      1
 001   peds
 002  peds1
 003     4U
 004    4U1
 005     MS

但我的其他 2 列已经消失,我不太清楚在数据帧级别执行此操作的正确语法,因此它将保留其余列。

我想要的输出:

    N-D       0     1    value
Numerator     001  peds      0
Denominator   002  peds1     1
Numerator     003  4U        0
Denominator   004  4U1       1
Numerator     005  MS        0

【问题讨论】:

    标签: python pandas split


    【解决方案1】:
    i = df.columns.get_loc('unit')
    df2 = df['unit'].str.split(" ", expand=True)
    pd.concat([df.iloc[:, :i], df2, df.iloc[:, i+1:]], axis=1)
    
               N-D    0      1  value
    0    Numerator  001   peds      0
    1  Denominator  002  peds1      1
    2    Numerator  003     4U      0
    3  Denominator  004    4U1      1
    4    Numerator  005     MS      0
    

    如果你想摆脱0 列

    df.assign(unit=df.unit.str.split(n=1).str[1])
    
               N-D   unit  value
    0    Numerator   peds      0
    1  Denominator  peds1      1
    2    Numerator     4U      0
    3  Denominator    4U1      1
    4    Numerator     MS      0
    

    您可以将列重命名为 'unit' 任何您喜欢的名称

    df.assign(unit=df.unit.str.split(n=1).str[1]).rename(columns=dict(unit='w/e'))
    
               N-D    w/e  value
    0    Numerator   peds      0
    1  Denominator  peds1      1
    2    Numerator     4U      0
    3  Denominator    4U1      1
    4    Numerator     MS      0
    

    【讨论】:

    • 有没有更直接的方法?无需使用 pd.concat?只是想知道
    • @Jessica 我能想到很多方法……但不是更直接。
    • 如何删除名称为“0”的列? del df3['0'] 不起作用。实际的列名是什么?
    • @Jessica 好吧,它的 0 不是 '0'... 但是如果你想摆脱 0 那么我有更好的解决方案给你......一会儿。
    • @piRsquared 如果要拆分多个列并且必须将所有结果列分配回原始 df,您将如何执行此操作?
    【解决方案2】:

    你可以试试:

    df[['unit','name']] = df.unit.str.split(" ",expand=True,)

    df

    这将为您提供所需的输出。

    N-D           unit name    value
    Numerator     001  peds      0
    Denominator   002  peds1     1
    Numerator     003  4U        0
    Denominator   004  4U1       1
    Numerator     005  MS        0   
    

    【讨论】:

    • 这还不错。之后只需要删除原始列。
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 2019-01-09
    • 1970-01-01
    • 2016-07-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多