【发布时间】:2014-09-19 18:25:41
【问题描述】:
我正在使用sqlalchemy,它允许对最近发布的 0.14.1 版本的 pandas 进行 sql 查询。
import pandas as pd
from dateutil import parser
from sqlalchemy import create_engine
import datetime
a=[['Datetime', 'Now Date', 'numbers', 'mixed'], ['1/2/2014', datetime.datetime.now(),6, 'z1'], ['1/3/2014', datetime.datetime.now(), 3, 'z1']]
df = pd.DataFrame(a[1:],columns=a[0])
df['Datetime']=df['Datetime'].map(lambda x: parser.parse(x))
engine=create_engine('sqlite:///:memory:')
df.to_sql('db_table',engine, index=False)
df_new=pd.read_sql_query("SELECT * FROM db_table ",engine)
>>> df.dtypes
Datetime datetime64[ns]
Now Date datetime64[ns]
numbers int64
mixed object
dtype: object
>>> df_new.dtypes
Datetime object
Now Date object
numbers int64
mixed object
dtype: object
如您所见,我原来的datetime 格式在输入引擎时丢失了。但是 pandas 提供了一种通过解析来取回它的方法。
df_new=pd.read_sql_query("SELECT * FROM db_table ",engine, parse_dates=['Datetime','Now Date'])
>>> df_new.dtypes
Datetime datetime64[ns]
Now Date datetime64[ns]
numbers int64
mixed object
dtype: object
问题是我将不同类型的datetimes 输入到具有不同列名的引擎中,我无法手动指定每个列名。我有太多东西要解析,而且它在不断变化。我正在寻找一个相当于这样的解决方案:
df_new=pd.read_sql_query("SELECT * FROM db_table ",engine, parse_dates=['*Date*'])
【问题讨论】: