Управление нулевыми датами - невозможно преобразовать число с плавающей запятой в целое число - PullRequest
0 голосов
/ 27 апреля 2018

Утро всем,

Мне нужно изменить даты больше 2261 в моем файле. Я получаю Выше ошибка при выполнении:

m = df['maturity_date'].str[:4].astype(int) > 2261
ValueError: cannot convert float NaN to integer

Сведения о столбце, вызвавшем ошибку:

display(df['maturity_date'].dtypes)
dtype('O')

display(df['maturity_date'].describe())
count                        3709
unique                        781
top       2166-09-23 00:00:00.000
freq                          234
Name: maturity_date, dtype: object

display(df[df['maturity_date'].isnull()])
No records returned

display(df[df['maturity_date']==0]['maturity_date'] )
764     0
931     0
1173    0
Name: maturity_date, dtype: object

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

#Convert dates greater than 2261
display(df['maturity_date'].str[:4].astype(int) > 2261)
df['maturity_date'] = df['maturity_date'].mask(m, '2261' +  to 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 голосов
/ 27 апреля 2018

Это должно работать. Сначала вам нужно преобразовать целые числа в строки, чтобы вы могли использовать метод .str.

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

Проблема в том, что если вы не хотите вызывать .str для целочисленного значения. Когда вы это сделаете, он преобразует его в NaN, что затем вызывает проблему с преобразованием в целое число.

Например:

import pandas as pd
df = pd.DataFrame({'value': [0, '0', '0000', '000']})

df.value.str[:4]
#0     NaN
#1       0
#2    0000
#3     000
#Name: value, dtype: object

df.value.astype('str').str[:4]
#0       0
#1       0
#2    0000
#3     000
#Name: value, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...