Получил эту ошибку ValueError: невозможно преобразовать число с плавающей запятой в целое число - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть даты в этом формате 29.12.2011 в виде строки, которую я предполагаю, и мне нужен только год, поэтому я пишу эту функцию для извлечения только года, но я получил
" ValueError: невозможно преобразовать число с плавающей запятой в integer"Похоже, у меня где-то есть Нэн, и единственное решение, которое я могу придумать, - это отбросить строки с помощью Нэн, но я не могу этого сделать, потому что мне нужны данные из других столбцов.

 def get_year(date):
    year = ''
    try:
        year = date[-4:]
    except TypeError:
        year = str(date)[0:4]
    return (year).astype(int)

Функция get_year работает, когда я использую этот код

for i in df.index:
    if (not pd.isna(df['yearOpened'][i]) and get_year(df['yearOpened'][i]) > 1955):
            print('something')

Я использую .lo c и хочет знать, как пропустить Нэн с помощью .lo c

`df.loc[get_year(df['yearOpened'])]`

1 Ответ

0 голосов
/ 28 февраля 2020

Вы можете использовать встроенную библиотеку даты и времени 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...