python - 在 Pandas 中创建年份列

标签 python regex pandas

我正在尝试创建一个年份列,其中的年份取自数据框中的标题列。此代码有效,但列 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/

相关文章:

python - Pandas TimerGrouper : Index with beginning

python - 转换 timedelta hh :mm to seconds

python - XGBoost:特征名称不匹配

python - 标准正则表达式与 python 正则表达式差异

Python 在一项和列表之间创建排列

regex - 获得字素的正确方法是什么?

javascript - 如果在特定单词之前存在字符加空格,则不匹配

Javascript 正则表达式在 <img> 和样式 =""中添加属性

python - 在 Pandas 库中转换Image数组以用于PCA

python - 在自定义 Python 类中覆盖默认方法的简单方法?