問題

我正在嘗試將字串列拆分為不同的列並嘗試 如何將列拆分為兩列?

字串的模式如下所示:

 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