Вы можете использовать встроенную библиотеку даты и времени Python, чтобы с легкостью извлечь год из вашей строки.
from datetime import datetime
date = '12/29/2011'
dt = datetime.strptime(date, '%m/%d/%Y') #create datetime object
dt.year
Output: 2011
ИЛИ
Вы можете использовать функцию pandas .to_datetime которая будет обрабатывать значения nan для вас.
import pandas as pd
import numpy as np
dates = ['12/29/2011', '12/30/2012', np.nan]
dt = pd.to_datetime(dates)
dt.year
Output: Float64Index([2011.0, 2012.0, nan], dtype='float64')
Редактировать (в ответ на комментарии)
Чтобы получить DataFrame всех плохих строк, вы можете просто проиндексировать все строки, которые возвращают NaT
из операции pd.to_datetime(df['dates'], errors='coerce')
.
data = {'dates': ['12/29/2011', '12/30/2012', np.nan, '1/1/9999'],
'values': [1,2,3,4]}
df = pd.DataFrame(data)
dt = pd.to_datetime(df['dates'], errors='coerce')
bad_rows = df[dt.isna()] #indexing out all rows which contain nan values
bad_rows.to_csv('bad_data.csv')