как я могу разобрать дату и время в пандах с определенным форматом - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть прямой поток CSV из API, который я использую для передачи данных в базу данных со следующим кодом:

def loadData(data, engine) :
stream = data.content

try:
    df = pd.read_csv(io.StringIO(stream.decode('utf-8')))
    df['Snapshot'] = datetime.datetime.now()

    if file.split(".")[0] == "SIM_SDS" :
        df.to_sql(file.split(".")[0], engine, if_exists='append', index=False, infer_datetime_format = True)
    else :
        df.to_sql(file.split(".")[0], engine, if_exists='replace', index=False, infer_datetime_format = True)
except:
    print('Loading data to the database failed for ' + file)

Проблема, с которой я сталкиваюсь, заключается в том, что формат даты и времени приходит вYYYY-MM-DDTHH: MM: SS.SSSZ (например, 2017-10-30T20: 26: 22.731Z)

Я нашел много разных версий, где есть только T или T с+0300, но мне еще не удалось найти этот конкретный формат, и я не могу заставить его проанализировать их как datetime.Другая часть этой проблемы заключается в том, что поля даты и времени не одинаковы в каждом отдельном случае, поэтому я также должен иметь способ распознавания этого формата как даты и времени.

Проблема, которая возникает при создании таблицы в базе данных, поскольку поля отображаются в виде текста;это приводит к проблемам, когда они используются в таблице для работы с датированными типами.

Попробуйте 1:

dateCol = [col for col in df.columns if 'Date' in col]
    for col in dateCol:
        df[col] = df[col].map(lambda x: x.strip('T').strip('Z'))
        print(df[col])

Это не удалось, я думаю, из-за проблемы NaN, где нет даты вполе.

1 Ответ

0 голосов
/ 27 ноября 2018

Получил это для работы со следующим:

def loadData(data, engine) :
    stream = data.content

try:
    df = pd.read_csv(io.StringIO(stream.decode('utf-8')))
    df['Snapshot'] = datetime.datetime.now()
    df.where(df.notnull(),None)
    dateCol = [col for col in df.columns if 'Date' in col]
    for col in dateCol:
        df[col] = pd.to_datetime(df[col])

    if file.split(".")[0] == "SIM_SDS" :
        df.to_sql(file.split(".")[0], engine, if_exists='append', index=False)
    else :
        df.to_sql(file.split(".")[0], engine, if_exists='replace', index=False)
except:
    print('Loading data to the database failed for ' + file)

Это приводит к правильному формату полей таблицы, я точно знаю, что datetime будет datetime.

Не стесняйтесь даватьмне предложения по улучшению, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...