У меня есть прямой поток 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, где нет даты вполе.