<p>抱歉,我没注意到你不仅仅是在更新字段,还想在结尾处替换一个数字,但是即使是这样,把你的数字正确地转换成罗马数字比映射每一个可能出现的数字要好得多(如果一个数字大于25,你的代码会发生什么?)。所以,有一种方法可以做到:</p>
<pre><code>ROMAN_MAP = [(1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'), (100, 'C'), (90, 'XC'),
(50, 'L'), (40, 'XL'), (10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')]
def romanize(data):
if not data or not isinstance(data, str): # we know how to work with strings only
return data
data = data.rstrip() # remove potential extra whitespace at the end
space_pos = data.rfind(" ") # find the last space before the number
if space_pos != -1:
try:
number = int(data[space_pos + 1:]) # get the number at the end
roman_number = ""
for i, r in ROMAN_MAP: # loop-reduce substitution based on the ROMAN_MAP
while number >= i:
roman_number += r
number -= i
return data[:space_pos + 1] + roman_number # put everything back together
except (TypeError, ValueError):
pass # couldn't extract a number
return data
</code></pre>
<p>现在,如果我们将数据帧创建为:</p>
^{pr2}$
<p>我们无法轻松地将我们的函数应用于整列:</p>
<pre><code>HSP_OLD['tryl'] = HSP_OLD['tryl'].apply(romanize)
</code></pre>
<p>结果是:</p>
<pre><code> tryl
0 SAF/HSP: Secondary diagnosis E code I
1 None
2 SAF/HSP: Secondary diagnosis E code XI
3 Something else without a number at the end
</code></pre>
<p>当然,您可以根据需要调整<code>romanize()</code>函数来搜索字符串中的任何数字并将其转换为罗马数字—这只是一个如何快速找到字符串末尾的数字的示例。在</p>