我目前正在阅读带有pandas的csv文件。我希望将具有类似日期时间的字符串的列转换为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
我开始在这里搜索,发现可以指示 date_parser 并启动组合。到目前为止,这是我在这个建议的帮助下尝试过的。 Can pandas automatically recognize dates
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=['datetime'],
date_parser=dateparse)
现在我收到以下错误
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' object is not subscriptable
date_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。
答案 0 :(得分:0)
可能是一个简单的错误。我认为你应该这样做:
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'])