- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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
问题是我将不同类型的日期时间
输入到具有不同列名称的引擎中,我无法手动指定每个列名称。我有太多的东西要解析,而且它在不断变化。我正在寻找一个相当于这样的解决方案:
df_new=pd.read_sql_query("SELECT * FROM db_table ",engine, parse_dates=['*Date*'])
最佳答案
SQLite 没有日期或日期时间类型。因此,日期时间值存储为字符串,并且在获取查询时它们也以字符串形式返回。
但这里有一些不同的选项来解决这个问题:
使用read_sql_table
而不是read_sql_query
(如果您只需要执行“SELECT * FROM ...”或某些列,并且不需要where子句)。这将使用表模式中的信息并检测它是日期时间列并转换它们(sqlalchemy 执行此操作):
In [13]: df_new2 = pd.read_sql_table("db_table",engine)
In [15]: df_new2.dtypes
Out[15]:
Datetime datetime64[ns]
Now Date datetime64[ns]
numbers int64
mixed object
dtype: object
使用 sqlite 连接时,您可以指定 sqlite3.PARSE_DECLTYPES
(请参阅 docs 或此问题: How to read datetime back from sqlite as a datetime instead of string in Python? ):
In [33]: con = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
In [34]: df.to_sql('db_table', con, index=False)
In [35]: df_new = pd.read_sql_query("SELECT * FROM db_table",con)
In [36]: df_new.dtypes
Out[36]:
Datetime datetime64[ns]
Now Date datetime64[ns]
numbers int64
mixed object
dtype: object
这似乎不太适合 sqlalchemy ( http://docs.sqlalchemy.org/en/rel_0_9/dialects/sqlite.html#compatibility-with-sqlite3-native-date-and-datetime-types )
您可以稍后进行解析,以在包含“日期”的所有列上自动执行此操作:
In [45]: date_cols = [col for col in df.columns if 'Date' in col]
In [47]: for col in date_cols:
....: df[col] = pd.to_datetime(df[col])
....:
关于pandas 0.14.1 中 sqlalchemy 的 python pandas parse_dates 列通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25927272/
这段代码: import pandas as pd from StringIO import StringIO data = "date,c1\n2012-07-31 02:00,1.1\n2012-
我正在将日期时间格式的数据导出到 csv。当我将它导入回来时,我需要能够在没有任何列名或列号引用的情况下将数据作为日期读取。 看起来 Pandas read_csv 具有将日期自动解析为日期时间格式的
我正在使用以下内容来读取 csv 文件:- seller_in = pd.read_csv(seller_file, names=["MID", "START_DAY"], sep='\t', par
我将以下格式的“日期”存储为字符串,请参见 2 个示例: vrijdag 1 mei 2020, donderdag 4 juni 2020 现在我想 date_parse 但问题是这不适用于荷兰语日
我有这个 data_frame 示例: name,time_0 name,22/04/2014 00:44 OTROGUAPOSUELTO,22/04/2014 13:20 我想解析 time_0,但
以下代码无法将我的日期列解析为 csv 文件中的日期。 data=pd.read_csv('c:/data.csv',parse_dates=True,keep_date_col = True) 或
我正在尝试以下列格式加载包含 OHLC 数据的 csv 文件。 In [49]: !head '500008.csv' 03 Jan 2000,12.85,13.11,12.74,13.11,9765
我正在读取具有这种结构的 csv 文件: 2008,1,283.7,8 2008,2,323.1,8 2008,3,270.7,2 2008,4,353.6,2 年、月、数据、观察 我正在通过这种方式
我试图在保存到 DateField 之前使用 parse_date 将字符串转换为日期时间对象,但它似乎一直没有返回任何内容。我做错了什么吗? >>> parse_date('13/07/2016')
我试图在保存到 DateField 之前使用 parse_date 将字符串转换为日期时间对象,但它似乎一直没有返回任何内容。我做错了什么吗? >>> parse_date('13/07/2016')
我遇到了一个问题,我认为 Pandas 的聪明人已经解决了,但我似乎找不到任何东西,所以我在这里。 我遇到的问题源于一些错误的数据,我希望 pandas 能够在读取时进行过滤。数据如下所示: Stat
从 MySQL 数据库检索数据时,Pandas parse_date 应该如何工作? Pandas 0.23 的文档提供此信息: parse_dates : list or dict, default
我有一个包含几列的 csv,包括“日期”和“时间”。我读取了 csv 并将“日期”和“时间”列设置为索引。 import pandas as pd data_file = 'data.csv' dat
我有一个 CSV 文件(如下示例),我正在尝试将其加载到数据框中并让 pandas 自动解析日期。 "http://www.example.com","http://example.com","tes
我试图读取一个 csv 文件 使用 df = pd.read_csv('Test.csv',index_col=0,parse_dates=[0],header=None,names=['Open',
是否可以通过一行调用来读取此文件: http://www.cpc.ncep.noaa.gov/products/precip/CWlink/daily_ao_index/monthly.ao.inde
我的输入 CSV 有两个时间戳格式的日期时间列“开始时间”和“结束时间”。 我可以解析时间戳,但无法将结果列设为 datetime64?! 无论我是否使用自定义日期格式化程序mdb_to_dateti
我在尝试通过 pandas.read_csv() 的 parse_dates 解析少数日期时遇到了这个错误。在下面的代码片段中,我试图解析格式为 dd/mm/yy 的日期,这导致我进行了不正确的转换。
我正在使用 sqlalchemy,它允许对最近发布的 0.14.1 版本的 pandas 进行 SQL 查询。 import pandas as pd from dateutil import par
我是一名优秀的程序员,十分优秀!