问题

我正在尝试将字符串列拆分为不同的列并尝试 如何将列拆分为两列?

字符串的模式如下所示:

 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
 

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

  最佳答案

只要我们知道要提取的特定字符串,我们可以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)?(\S+)")
Out[59]: 
   0         1
0  a         b
1  a         b
2            b
3            c
4     whatever
 

  相同标签的其他问题

pandas