我正在尝试创建一个年份列,其中的年份取自数据框中的标题列。此代码有效,但列 dtype 是对象。例如,在第 1 行中,年份显示为 [2013]。
我怎样才能做到这一点,但将列数据类型更改为 float ?
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 year
Italy Vulkà Bianco 87 Sicily Nicosia 2013 Vulkà Bianco [2013]
最佳答案
您可以使用 str.extract()
来代替返回字符串列表的 re.findall
:
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')
请注意,str.extract
中的模式必须至少包含 1 个捕获组,其值将用于填充新列。仅考虑第一个匹配项,因此如果需要,您可能需要稍后精确确定上下文。
我建议在 \d{4}
模式周围使用单词边界 \b
将 4 位数字 block 作为整个单词进行匹配,并避免在像 这样的字符串中进行部分匹配>1234567890
。
关于python - 在 Pandas 中创建年份列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54953166/