如何用Python转换序数词为英文单词?Pandas地址列转换方案问询
嘿,我来帮你搞定这个序数词转换的问题!
核心思路
其实Python标准库没有直接把"1st"这类序数词字符串转成英文单词的函数,但我们可以结合num2words和正则表达式来实现,而且能轻松应用到Pandas DataFrame的列上。
步骤1:准备依赖
首先确保你已经安装了需要的库:
pip install num2words pandas
步骤2:定义转换函数
我们先写一个函数,用来处理单个序数词字符串(比如"1st"):
from num2words import num2words import re def ordinal_str_to_word(ordinal_str): # 提取字符串里的数字部分 num = int(re.search(r'\d+', ordinal_str).group()) # 转成序数词单词 return num2words(num, to='ordinal')
步骤3:批量处理DataFrame列
接下来用Pandas的str.replace方法,配合正则表达式匹配所有序数词模式,然后应用上面的函数:
import pandas as pd # 你的示例DataFrame data = { 'Address': [ '2 fairgreen lane bolton callan', '2 leix rd cabra dublin 7', '7 sraid na mara 1st sea rd strandhill rd' ] } newdf = pd.DataFrame(data) # 正则匹配序数词模式:数字+st/nd/rd/th pattern = r'\d+(st|nd|rd|th)' newdf['Address'] = newdf['Address'].str.replace(pattern, lambda x: ordinal_str_to_word(x.group()), regex=True) # 查看结果 print(newdf)
运行后输出会是:
Address 0 2 fairgreen lane bolton callan 1 2 leix rd cabra dublin 7 2 7 sraid na mara first sea rd strandhill rd
补充说明
- 正则表达式
\d+(st|nd|rd|th)能匹配所有常见的序数词格式(比如1st、2nd、3rd、4th、10th、11th等) - 如果你的地址里有大写的序数词(比如"1ST"),可以在函数里加个
.lower()处理,或者调整正则为\d+(ST|ND|RD|TH|st|nd|rd|th)来匹配大小写 num2words支持很多语言,但默认是英文,刚好符合你的需求
内容的提问来源于stack exchange,提问作者CuriousQuest
相关产品推荐
相关产品推荐

