Обновлять только те строки, в которых даты погашения больше, чем максимальная дата python - 2261 - не могут преобразовать число с плавающей запятой в целое число - PullRequest
0 голосов
/ 28 мая 2018

Я хочу обновить любые даты, превышающие максимальную дату Python:

display(df['maturity_date'].dtypes)

dtype('O')

display(df['maturity_date'].describe())

count                    3488
unique                    766
top       2166-09-23 00:00:00
freq                      130
Name: maturity_date, dtype: object


m = df['maturity_date'].str[:4].astype(int) > 2261

ValueError: cannot convert float NaN to integer

В этом случае, кажется, нет ни одной, так по этой ли причине возникает ошибка?Как я могу изменить, чтобы Pandas обновлялся, только если условие истинно?Лучше всего подавить ошибку или обработать ее?

df['maturity_date'] = df['maturity_date'].mask(m, '2261' + df['maturity_date'].str[4:]) # for all dates greater than python max date replace
df['maturity_date'] = pd.to_datetime(df['maturity_date']) 

1 Ответ

0 голосов
/ 28 мая 2018

Я думаю, нужно преобразовать в float, потому что пропущенные значения NaN s или None s имеют тип float, потому что в пандах невозможно преобразовать NaN s в int для дизайна:

m = df['maturity_date'].str[:4].astype(float) > 2261

Другим решением является удаление строк с NaN с или None с первым:

df = df.dropna(subset=['maturity_date'])

Для проверки проблемных строк используйте:

df = df[df['maturity_date'].isnull()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...