Pandas read_csv将字符串转换为datetime并保存到数据库Python

Pandas read_csv将字符串转换为datetime并保存到数据库Python,python,pandas,datetime,dataframe,sqlalchemy,Python,Pandas,Datetime,Dataframe,Sqlalchemy,我目前正在使用pandas读取csv文件。我希望将具有类似datetime的字符串的列转换为datetime对象。我对数据库有一些限制,指定列应该是这种类型 我的csv文件中的一个示例行是: 2015-11-28 00:10:00, 99, 21 当我遇到以下问题时,我最初就遇到了这个问题 # import CSV file df = pd.read_csv(filename, error_bad_lines=False, warn_bad_lines=False)

我目前正在使用pandas读取csv文件。我希望将具有类似datetime的字符串的列转换为datetime对象。我对数据库有一些限制,指定列应该是这种类型

我的csv文件中的一个示例行是:

2015-11-28 00:10:00, 99, 21
当我遇到以下问题时,我最初就遇到了这个问题

    # import CSV file
    df = pd.read_csv(filename, error_bad_lines=False, warn_bad_lines=False)

    # TODO  Save data into db
    # ADD time, banana, apple
    for i in df.index:
        m = AggregatedMeasurement(
            time=df.loc[i, 'Time UTC'],
            banana=df.loc[i, 'BANANA'],
            apple=df.loc[i, 'APPLE']
        )
        db.session.add(m)  # add to db
    db.session.commit()  # perform them all
我收到了以下错误

StatementError: (builtins.TypeError) SQLite DateTime type only accepts Python datetime and date objects as input
我开始在这里搜索,发现可以指示日期\u解析器并开始组合。这就是我在这个建议的帮助下迄今为止所做的尝试

    df = pd.read_csv(filename, error_bad_lines=False,
                     warn_bad_lines=False)

    # Changing datatype
    df['Time UTC'] = pd.to_datetime(df['Time UTC'])
现在我得到了以下错误

ValueError: 'datetime' is not in list
我是不是实施错了?提前谢谢

更新1

在以下更改之后

dateparse = lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')

# import CSV file
    df = pd.read_csv(filename, error_bad_lines=False,
                      warn_bad_lines=False,
                      parse_dates=['Time UTC'],
                      date_parser=dateparse)
我得到了一个
TypeError:“NoneType”对象在此特定部分上不可下标
date\u parser=dateparse)

更新2 后来,我尝试了下一个建议

    df = pd.read_csv(filename, error_bad_lines=False,
                     warn_bad_lines=False)

    # Changing datatype
    df['Time UTC'] = pd.to_datetime(df['Time UTC'])

我认为这是有效的:)我遇到了另一个错误,但它对应于另一个我尚未设置的数据库限制关系/ForeignKey

可能是个简单的错误。我认为你应该这样做:

df = pd.read_csv(filename, 
                 error_bad_lines=False, 
                 warn_bad_lines=False, 
                 parse_dates=['Time UTC'],
                 date_parser=dateparse)
实际上,您应该将
parse_dates
引用到感兴趣的列
'Time UTC'
,而不是
'datetime'

否则,您可以更轻松地让
pd.to_datetime()
使用以下命令处理任务:

df = pd.read_csv(filename, error_bad_lines=False,
                     warn_bad_lines=False)

# Changing datatype
df['Time UTC'] = pd.to_datetime(df['Time UTC'])

谢谢你的回复。我做了你建议的修改,现在我面临一个新的错误,所以我认为这是进步。新的错误是:“非类型”对象不是subscriptable您是否尝试过执行
df['Time UTC']=pd.to_datetime(df['Time UTC'])
?你能提供更多关于错误发生在哪里的信息吗?(前一行)我用代码更新和错误更新了原始帖子。但是,在执行您的建议之后:`df=pd.read_csv(filename,error\u bad\u lines=False,warn\u bad\u lines=False)\\将数据类型df['Time UTC']=pd.to_datetime(df['Time UTC'])更改为\`似乎有效!我得到了我的下一个错误(我认为与此无关):)谢谢@Arnaud。我想投赞成票,但我还没有足够的代表权。如果这行得通,那就太好了——我认为这确实是一种更干净的方式。你仍然可以接受我的回答!谢谢