为了账号安全,请及时绑定邮箱和手机立即绑定

在 Pandas 中创建年份列

在 Pandas 中创建年份列

慕虎7371278 2021-11-23 19:24:06
我正在尝试创建一个年份列,其中年份取自数据框中的标题列。此代码有效,但列 dtype 是对象。例如,在第 1 行中,年份显示为 [2013]。我该怎么做,但将列 dtype 更改为浮点数?year_list = []for i in range(title_length):    year = re.findall('\d{4}', wine['title'][i])    year_list.append(year)wine['year'] = year_list这是我的数据框的头部:country   designation     points    province               title             yearItaly     Vulkà Bianco     87        Sicily     Nicosia 2013 Vulkà Bianco   [2013]
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

re.findall返回结果列表。用re.search

wine['year'] = [re.search('\d{4}', title)[0] for title in wine['title']]

最好还是使用熊猫extract方法。

wine['year'] = wine['title'].str.extract(r'\d{4}')

定义

Series.str.extract(pat, flags=0, expand=True)

对于系列中的每个主题字符串,从正则表达式 pat 的第一个匹配项中提取组。


查看完整回答
反对 回复 2021-11-23
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

相反的re.findall是返回字符串列表,你可以使用str.extract()

wine['year'] = wine['title'].str.extract(r'\b(\d{4})\b')

或者,如果您只想匹配 1900-2000 年:

wine['year'] = wine['title'].str.extract(r'\b((?:19|20)\d{2})\b')

请注意,模式 instr.extract必须至少包含 1 个捕获组,其值将用于填充新列。只会考虑第一个匹配项,因此如果需要,您可能需要稍后精确确定上下文。

我建议\b\d{4}模式周围使用单词边界来匹配作为整个单词的 4 位块,并避免在像1234567890.


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 366 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号