grl*_*aer 3 python numpy pyodbc pandas
我目前正在根据用户输入查询来自MS SQL Server 2008的数据.但是,当我尝试使用describe()函数获取五个数字摘要时,我收到错误.
import pyodbc
import numpy as np
import pandas.io.sql as sql
import pandas
print "What Part Number will you examine?"
PartN = raw_input()
conn = pyodbc.connect('my connection info')
curs = conn.cursor()
sqlr = """SELECT partmadeperhour FROM Completions WHERE PartNumber = ?
AND endtime > '2012-12-31 23:59:00' ORDER BY partmadeperhour"""
q = curs.execute(sqlr,[PartN]).fetchall()
df = pandas.DataFrame(q, columns =['rate'])
print df
columnnames = list(df.columns.values)
print columnnames
df['rate'].describe()
Run Code Online (Sandbox Code Playgroud)
我的数据框看起来像这样
rate
0 [0.25]
1 [0.67]
2 [0.93]
... ...
1474 [5400.00]
Run Code Online (Sandbox Code Playgroud)
我得到以下返回和错误:
[1475 rows x 1 columns]
['rate']
rate object
dtype: object
Traceback (most recent call last):
File "newr.py", line 30, in <module>
df['rate'].describe()
File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 4034, in describe
return describe_1d(self, percentiles)
File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 4031, in describe_1d
return describe_categorical_1d(data)
File "C:\Python27\lib\site-packages\pandas\core\generic.py",
line 4007, in describe_categorical_1d
objcounts = data.value_counts()
File "C:\Python27\lib\site-packages\pandas\core\base.py", line 433, in value_counts
normalize=normalize, bins=bins, dropna=dropna)
File "C:\Python27\lib\site-packages\pandas\core\algorithms.py", line 245, in value_counts
keys, counts = htable.value_count_object(values, mask)
File "pandas\hashtable.pyx", line 983, in pandas.hashtable.value_count_object
(pandas\hashtable.c:17616)
File "pandas\hashtable.pyx", line 994, in pandas.hashtable.value_count_object
(pandas\hashtable.c:17353)
TypeError: unhashable type: 'pyodbc.Row'
Run Code Online (Sandbox Code Playgroud)
我知道我需要将数据框中的数据转换为其当前对象的不同类型,但不确定如何转换为浮点数.
任何帮助表示赞赏
确保您使用0.12或更高版本的pandas:
>>> import pandas
>>> pandas.__version__
'0.14.1'
Run Code Online (Sandbox Code Playgroud)
使用pandas.read_sql_query直接填充数据框,传递查询字符串和pyodbc连接.请注意,列别名rate已添加到T-SQL查询中,因为pandas.read_sql_query不支持传递列名或列名字典:
...
>>> sql = "select 0.25 union select 0.67 union select 0.93 as rate"
>>> df = pandas.read_sql_query(sql, connection)
>>> df
rate
0 0.25
1 0.67
2 0.93
>>> df['rate'].describe()
count 3.000000
mean 0.616667
std 0.343123
min 0.250000
25% 0.460000
50% 0.670000
75% 0.800000
max 0.930000
dtype: float64
Run Code Online (Sandbox Code Playgroud)
可以使用params参数of 来提供原始查询中的参数值pandas.read_sql_query.