只拆分1列到2但保留其他pandas python

时间:2017-05-12 23:00:01

标签: python pandas split

我有一个示例数据:

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

我想用空格将'unit'列拆分为2:“” 我的代码:

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

输出是:

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

但我的其他两列已经不见了,我不太清楚在数据框级别上执行此操作的正确语法,因此它将保留其余列。

我想要的输出:

    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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

您可以简单地尝试:

<块引用>

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