Python Pandas日期时间转换或编码问题

时间:2018-01-05 15:37:12

标签: python postgresql datetime encoding psycopg2

我希望通过pd.read_csv上传CSV数据。 在这个线程的最初创建中,我认为这个问题与数据中日期时间值的转换有关,因为它似乎正确地执行了数据到Python可读格式的转换,直到将数据插入到PostgreSQL,现在我认为错误的罪魁祸首可能是编码。我的数据库编码为utf-8。数据中包含土耳其语和德语字符,例如名字和姓氏以及地址相关字段。

该代码段将CSV文件读入数据框,然后第一个for循环遍历定义为日期列(date_cols)的数据框中的所有列。然后检查日期列中的每个单元格的日期格式,并转换为可读的python日期格式,因为初始数据是以mm.dd.yyyy格式接收的。

这是代码的摘录:

# -*- coding: utf-8-sig -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import locale
locale.getpreferredencoding(False)
import pandas as pd
import datetime import datetime
import datetime import date

df = pd.read_csv(filename, encoding='ISO 8859-9', sep=';', header=0)
for col in date_cols:
    if col in df.columns:

        for index, row in df.iterrows():
            f_date = df.ix[index, col]
            if isinstance(f_date, unicode):
                f_date = datetime.strftime(pd.to_datetime(f_date), '%Y-%m-%d')
                df.ix[index, col] = f_date
                if f_date > str(pd.Timestamp.max.date()):
                    df.ix[index, col] = pd.Timestamp.max

                else:
                    df.ix[index, col] = f_date.date()

dict_items = df.to_dict(orient='records')

connection.execute(table.insert(), dict_items)

转化的输出是:

print(f_date) 02.03.1983
print(pd.to_datetime(f_date)) 1983-03-02 00:00:00
print(py_date) 1983-03-02

日期似乎是正确的格式yyyy-mm-dd(月份在中间即,但是当摄取到psycopg2时,该值会翻转为1969-02-03。所以格式现在是yyyy-dd-mm。

我正在尝试解决的问题是以下错误,其中发送到数据库的日期格式是yyyy-dd-mm而不是yyyy-mm-dd我正在尝试将此数据加载到PostgreSQL数据库中格式1983-03-02

(<class 'sqlalchemy.exc.DataError'>, DataError('(psycopg2.DataError) invalid input syntax for type date: ""\nLINE 1: ...@asp.de\', \'1983-02-03\'::date,

当我开始这可能是编码错误而不是日期时间转换问题时,我尝试了以下两种情况。

场景1(在文本编辑器中将文件编码为ISO 8859-1):

# -*- coding: utf-8-*-
reload(sys)
sys.setdefaultencoding("ISO 8859-1")
df = pd.read_csv(full_path, encoding='ISO 8859-1', sep=';')

错误是:

(<class 'sqlalchemy.exc.DataError'>, DataError('(psycopg2.DataError) invalid byte sequence for encoding "UTF8": 0x80\n

场景2(在文本编辑器中将文件编码为utf-8):

# -*- coding: utf-8-*-
reload(sys)
sys.setdefaultencoding("utf-8")
df = pd.read_csv(full_path, encoding='utf-8', sep=';')

我收到的错误是:

(<class 'sqlalchemy.exc.DataError'>, DataError('(psycopg2.DataError) invalid input syntax for type date: ""\nLINE 1: ...@asp.de\', \'1983-02-03\'::date

由于

0 个答案:

没有答案