我正在使用pyodbc从SQL Server向Python查询一些数据,并将结果存储在pandas数据框中。结果列之一应该是日期数据类型,但是它将作为一个对象出现。我试图弄清楚如何使用此列中的日期。
我能够将所有列都转换为字符串和干净数据,能够成功地将quantity_picked转换为浮点数,但是在将其转换为OR之前或之后无法成功地将date_expected列转换为datetime64到一个字符串。
收到错误:
NameError: name 'datetime64' is not defined
我也尝试过使用pd.to_datetime()简单地转换结果,并且收到以下错误:
TypeError: <class 'pyodbc.Row'> is not convertible to datetime
在使用pyodbc查询时,我找不到任何有关如何指定数据类型的文档。
如果我错过了明显的事情,请原谅,我是python新用户。
我不确定是否应该担心在查询时,查询之后,清理之前,清理之后或清理之后是否以正确的日期数据类型获取此数据类型,或者是否有可能。如果不可能的话,不胜感激有关在python分析过程中如何处理日期的任何指导。
这是我将数据从SQL Server提取到Python并将其放入数据框的方式:
cursor = sql_conn.cursor()
SQL_query1 = cursor.execute('SELECT item_number FROM [Data].[MCF].[FULL ORDER DETAIL]')
pratice_df = pd.DataFrame()
practice_df1 = pd.DataFrame(SQL_query1, columns=['item_number']) #imports all values from query as one column
SQL_query2 = cursor.execute('SELECT quantity_picked FROM [Data].[MCF].[FULL ORDER DETAIL]')
practice_df2 = pd.DataFrame(SQL_query2, columns=['quantity_picked'])
SQL_query3 = cursor.execute('SELECT date_expec FROM [Data].[MCF].[FULL ORDER DETAIL]')
practice_df3 = pd.DataFrame(SQL_query3, columns=['date_expected'])
#combine separate dataframes into one dataframe with corresponding values
practice_df = pd.concat([practice_df1, practice_df2, practice_df3], axis=1)
让pyodbc传递数据而不将所有3列都放在一个数据帧中的一列时遇到了麻烦,因此我将这些列移到了单独的数据帧中,然后将它们合并。
这是数据的显示方式(清洁后):
0 0001111041660 1.0 2019-05-27
1 0001111046070 2.0 2019-05-27
如果我目前输入Practice_df.info(),则会收到:
RangeIndex: 55676 entries, 0 to 55675
Data columns (total 3 columns):
item_number 55676 non-null object
quantity_picked 55676 non-null float64
date_expected 55676 non-null object
dtypes: float64(1), object(2)
任何指导都是值得赞赏的。谢谢。
答案 0 :(得分:0)
因此,我们有一个SQL Server表,其中的文本列包含'yyyy-mm-dd'日期值。如果我们只是按原样检索列 ,则这些值将作为字符串存储在DataFrame中:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div id="spacer_div" class="flx">Some Data</div>
<table>
<tr><td>Dummy data</td><td class="dodlg">More data1</td></tr>
<tr><td>Dummy data</td><td class="dodlg">More data2</td></tr>
<tr><td>Dummy data</td><td class="dodlg">More data3</td></tr>
<tr><td>Dummy data</td><td class="dodlg">More data4</td></tr>
<tr><td>Dummy data</td><td class="dodlg">More data5</td></tr>
<tr><td>Dummy data</td><td class="dodlg">More data6</td></tr>
<tr><td>Dummy data</td><td class="dodlg">More data7</td></tr>
<tr><td>Dummy data</td><td class="dodlg">More data8</td></tr>
<tr><td>Dummy data</td><td class="dodlg">More data9</td></tr>
</table>
<div id="msg"></div>
但是,如果我们在查询中使用sql = """\
SELECT
item_number,
quantity_picked,
date_expec AS date_expected
FROM [FULL ORDER DETAIL]"""
practice_df = pd.read_sql_query(sql, engine)
print(practice_df)
# item_number quantity_picked date_expected
# 0 0001111041660 1 2019-05-27
# 1 0001111046070 2 2019-05-27
sample_date = practice_df.at[0, 'date_expected']
print(type(sample_date)) # <class 'str'>
print(repr(sample_date)) # '2019-05-27'
,则会获取时间戳记值
CAST(date_expec AS datetime2)