缺少分割模式前的第一部分时分割字符串列

时间:2019-10-03 02:06:56

标签: pandas

我正在尝试将字符串列拆分为不同的列并尝试 How to split a column into two columns?

字符串的模式如下:

import pandas as pd
import numpy as np

>>> data = {'ab': ['a - b', 'a - b', 'b', 'c', 'whatever']}
>>> df = pd.DataFrame(data=data)

          ab
0      a - b
1      a - b
2          b
3          c
4   whatever

>>> df['a'], df['b'] = df['ab'].str.split('-', n=1).str

         ab          a          b
0     a - b          a          b
1     a - b          a          b
2         b          b        NaN
3         c          c        NaN
4  whatever    whatever       NaN


预期结果是

         ab          a          b
0     a - b          a          b
1     a - b          a          b
2         b        NaN          b
3         c        NaN          c
4  whatever        NaN   whatever

我想出的方法是

df.loc[~ df.ab.str.contains(' - '), 'b'] = df['ab']
df.loc[~ df.ab.str.contains(' - '), 'a'] = np.nan

是否有更通用/有效的方法来执行此任务?

2 个答案:

答案 0 :(得分:1)

我将使用Error: `.x` must be a vector, not a `magick-image` object Call `rlang::last_error()` to see a backtrace

get_dummies

更新

s=df['ab'].str.get_dummies(' - ')

s=s.mask(s.eq(1),s.columns.tolist()).mask(s.eq(0))
s
Out[7]: 
     a  b
0    a  b
1    a  b
2  NaN  b

答案 1 :(得分:1)

只要知道要提取的特定字符串,我们就可以extractall

df.ab.str.extract(r"(a)?(?:\s-\s)?(b)?")
Out[47]: 
     0    1
0    a    b
1    a    b
2  NaN    b
3    a  NaN

使用的数据:

data = {'ab': ['a - b', 'a - b', 'b','a']}
df = pd.DataFrame(data=data)

通过您的编辑,看来您的目标是将所有本身的内容放在第二栏中。您可以这样做:

df.ab.str.extract(r"(\S*)(?:\s-\s)?(\b\S+)")
Out[59]: 
   0         1
0  a         b
1  a         b
2            b
3            c
4     whatever