【发布时间】:2018-06-07 11:14:18
【问题描述】:
我正在使用带有 python 2.7 和 pyodbc 的 mac 从 Microsoft Sql 服务器查询数据。 在我的数据框中有一个时间戳列显示为 datetime64[ns]
程序结构 -
SQLCommand = (" SELECT Col1, Col2, Col3 from xyztable ")
DF = pd.read_sql(SQLCommand,cnxn)
# extracting Day and month by converting to dt
DF['TS']=DF['TS'].dt.strftime('%d%m%')
# Create labels from Categories (string type data column in SQL table), replacing each category
DF['Flag']= DF['CODE']
DF.dtypes
TS datetime64[ns]
TIWOR object
CODES object
T-enc int8
TS object
TS_HHMM object
TS_DD int64
TS_DDMM int64
Flag object
dtype: object
# I am able to replace all categories but it fails at this step as u\2013 appears in the middle of string
DF['Flag'].unique()
array([0, 1, nan, u'Dev \u2013 Env'], dtype=object)
# All attempts to find and replace are not working, some records have 'nan' values and DF.dropna does not work.
尝试修复
- 已参考了各种堆栈溢出文章,但没有帮助。
- 将 Sql 查询输出导出到 CSV 文件并加载到 Dataframe 中,仍然是同样的问题。
DF.to_csv('~/SQLoutput.csv', sep='\t', encoding='utf-8') - 将 sql 查询输出导出到 excel 文件并加载到数据框中,仍然是同样的问题
DF=pd.read_excel('/Users/User1/SQLoutput.xlsx',sheet_name=0,encoding='utf-8') - 在代码开头添加了
# -*- coding:utf-8 -*-,没有帮助 - 已验证 pyodbc 设置,没问题。
tsql -S sqlservername -U Username -P Password
【问题讨论】:
-
数据库中的列是什么日期类型?另外,该记录的价值是什么?数据库中真的是“\u2013”吗?
标签: python pandas pyodbc python-unicode