用熊猫将字符串分成数字和文本

Pau*_* T. 4 python string pandas

设置

我有一个pandas数据框,其中包含一列“ iso”,其中包含化学同位素符号,例如“ 4He”,“ 16O”,“ 197Au”。我想使用中的annotate()功能在图上标记很多(但不是全部)同位素matplotlib。标签格式应具有上标原子质量。我可以使用LaTeX样式格式来做到这一点:

axis.annotate('$^{4}$He', xy=(x, y), xycoords='data')
Run Code Online (Sandbox Code Playgroud)

annotate()对于要标记的每种同位素,我可以写出数十种上述语句,但我希望实现自动化。

问题

如何从iso列中提取同位素编号和名称?

提取这些片段后,我就可以制作标签了。可以说我们将它们转储到变量Num和中Sym。现在,我可以遍历同位素并执行以下操作:

for i in list_of_isotopes:
  (Num, Sym) = df[df.iso==i].iso.str.MISSING_STRING_METHOD(???)
  axis.annotate('$^{%s}$%s' %(Num, Sym), xy=(x[Num], y[Num]), xycoords='data')
Run Code Online (Sandbox Code Playgroud)

大概有一个pandas字符串方法,我可以放在上面。但是我很难找到解决方案。我一直在尝试split()extract()使用几种不同的模式,但无法获得理想的效果。

Rom*_*ain 6

这是我使用的答案split。使用的正则表达式可以改进,我在这种情况下很不好:-)

df = pd.DataFrame({'iso': ['4He', '16O', '197Au']})
result = df['iso'].str.split('(\d+)([A-Za-z]+)', expand=True)
result = result.loc[:,[1,2]]
result.rename(columns={1:'x', 2:'y'}, inplace=True)
print(result)
Run Code Online (Sandbox Code Playgroud)

产生

     x   y
0    4  He
1   16   O
2  197  Au
Run Code Online (Sandbox Code Playgroud)