根据可能不存在于所有值上的分隔符将 pandas 列分成两部分

Slo*_*uin 5 python split pandas

我的数据框的一列看起来像这样:

[application]
blah/3.14
xyz/5.2
abc
...
...
Run Code Online (Sandbox Code Playgroud)

(代表软件/版本)

我正在努力实现这样的目标:

[application] [name]  [ver]
blah/3.14      blah    3.14
xyz/5.2        xyz     5.2 
abc            abc     na   <-- this missing value can be filled in with a string too
...  
...
Run Code Online (Sandbox Code Playgroud)

正如您已经知道的,我想将列分成两部分,使用“/”作为分隔符。堆栈溢出解决方案建议如下:

tmptbl = pd.DataFrame(main_tbl.application.str.split('/', 1).tolist(), columns= ['name', 'ver'])
main_tbl['name'] = tmptbl.name
main_tbl['ver'] = tmptbl.ver
Run Code Online (Sandbox Code Playgroud)

乍一看看起来不错,但对于没有“/”的列(例如“abc”)它会崩溃。

我还能尝试什么?

jez*_*ael 4

与返回str.split参数一起使用:expand=TrueDataFrame

main_tbl[['name','ver']] = main_tbl.application.str.split('/', expand=True)
print (main_tbl)
  application  name   ver
0   blah/3.14  blah  3.14
1     xyz/5.2   xyz   5.2
2         abc   abc  None
Run Code Online (Sandbox Code Playgroud)

如果需要NaN添加replace

main_tbl.ver = main_tbl.ver.replace({None:np.nan})
print (main_tbl)
  application  name   ver
0   blah/3.14  blah  3.14
1     xyz/5.2   xyz   5.2
2         abc   abc   NaN
Run Code Online (Sandbox Code Playgroud)