Когда столбец кадра данных pandas содержит только NaN, str.fullmatch выдает:
AttributeError: Can only use .str accessor with string values!
Следующие 2 ведут себя так, как ожидалось:
data1 = [ ['2022-03-15 00:00:00'], [np.NaN] ]
df = pd.DataFrame(data1, columns = ['Date'] )
df = df.loc[ df.Date.str.fullmatch( '[0-9]{4}-[0-9]{2}-[0-9]{2}\s00:00:00', na=True ) ]
print(df)
data1 = [ [np.NaN], ['2022-03-15 00:00:00'] ]
df = pd.DataFrame(data1, columns = ['Date'] )
df = df.loc[ df.Date.str.fullmatch( '[0-9]{4}-[0-9]{2}-[0-9]{2}\s00:00:00', na=True ) ]
print(df)
Только когда столбец полностью NaN, возникает ошибка:
data1 = [ [np.NaN], [np.NaN] ]
df = pd.DataFrame(data1, columns = ['Date'] )
dateRegex = '[0-9]{4}-[0-9]{2}-[0-9]{2}\s00:00:00'
df = df.loc[ df.Date.str.fullmatch(dateRegex, na=True) ]
Не должен ли он заполнить NaN как True и, таким образом, быть принятым с loc, как и для двух других выше?
Когда вы создаете серию только со значениями NaN, dtype серии — float
, поскольку NaN
— это float
:
>>> s = pd.Series([np.nan, np.nan])
>>> s.dtype
dtype('float64')
>>> s.str
...
AttributeError: Can only use .str accessor with string values!
Вам нужно преобразовать его в object
(не обязательно str
;) dtype, прежде чем вы сможете использовать .str
:
>>> s.astype(object).str
<pandas.core.strings.accessor.StringMethods at 0x122deb1c0>
Так...
data1 = [ [np.NaN], [np.NaN] ]
df = pd.DataFrame(data1, columns = ['Date'])
dateRegex = '[0-9]{4}-[0-9]{2}-[0-9]{2}\s00:00:00'
df.Date = df.Date.astype(object) # <--- Add this line
df = df.loc[ df.Date.str.fullmatch(dateRegex, na=True) ]
Выход:
>>> df
Date
0 NaN
1 NaN