设置
我有一个pandas
数据框,其中包含一列'iso',其中包含化学同位素符号,如'4He','16O',' 197Au '。我想用matplotlib
中的annotate()
函数在图上标记许多(但不是全部)同位素。标签格式应具有上标的原子质量。我可以使用LaTeX样式格式来实现这一点:
axis.annotate('$^{4}$He', xy=(x, y), xycoords='data')
我可以为我想要标记的每一种同位素编写几十个类似上面的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')
大概,有一个pandas
字符串方法,我可以放在上面。但我想不出解决的办法。我一直在尝试split()
和extract()
与几个不同的模式,但不能得到预期的效果。
5条答案
按热度按时间uqdfh47h1#
这是我使用
split
的答案。使用的regexp可以改进,我对这类事情很不在行:-)(\d+)
代表整数,([A-Za-z]+)
代表字符串。生产
blpfk2vs2#
accepted answer给了我正确的方向,但我认为正确的pandas函数是extract。像这样,只返回匹配的正则表达式,消除了之后切片的使用。
给予
xam8gpfp3#
我会使用简单的字符串操作,而不需要正则表达式的麻烦。
nxowjjhe4#
要提取同位素符号的数字和元素,可以使用regular expression(简称:regex)与Python的
re
模块结合使用。正则表达式查找数字,然后查找被分组并使用组名称访问的字符。如果正则表达式匹配,您可以提取数据并.format()
所需的注解字符串:3z6pesqy5#
你有没有试过
strip()
,也许你可以考虑一下: