Pandas DataFrame提取字符串年份遇NaN问题,寻求解决办法
解决Pandas提取年份的问题
你的代码出错原因是Pandas的str切片仅支持位置索引,不支持用字符作为切片边界,所以str[',':'(']这种写法无效,导致返回全NaN。下面给几种可靠的解决方案:
方法1:正则表达式提取(推荐)
利用年份是4位数字的特征,用str.extract匹配提取:
df['year_correct'] = df['released'].astype(str).str.extract(r'(\d{4})')
原理:\d{4}匹配连续4位数字,extract会提取第一个匹配的结果作为新列值,兼容所有格式中包含4位年份的情况。
方法2:字符串分割
通过两次分割定位年份:
# 先按', '分割取第二部分,再按空格分割取第一个元素 df['year_correct'] = df['released'].astype(str).str.split(', ').str[1].str.split(' ').str[0]
或者用expand=True更直观:
df['year_correct'] = df['released'].astype(str).str.split(', ', expand=True)[1].str.split(' ', expand=True)[0]
原理:第一次分割后得到['June 13', '1980 (United States)'],取第二部分再分割就得到年份。
示例验证
假设你的DataFrame是:
import pandas as pd df = pd.DataFrame({'released': ['June 13, 1980 (United States)', 'January 1, 2023 (Canada)']})
用上述方法处理后,year_correct列会得到['1980', '2023'],结果正确。
内容的提问来源于stack exchange,提问作者Zohaib Ahmed
相关产品推荐
相关产品推荐

