这是一个我无法找到答案的简单问题。我有一个带有两个命令的.SQL文件。我想让Pandas将这些命令的结果拉入DataFrame。
SQL文件的命令就是这样,使用今天的日期查询时间较长。
SET @todaydate = DATE(NOW());
SELECT ...long query....;
我在建立连接(prod_db)之后尝试以下列方式使用read_sql并收到错误消息'' NoneType'对象不可迭代'
sqlpath = 'path.sql'
scriptFile = open(sqlpath,'r')
script = scriptFile.read()
df = pd.read_sql(script,prod_db)
我还尝试使用此处描述的功能和方法reading external sql script in python,但我不确定如何将结果导入熊猫数据框(或者我可能会遗漏某些内容) )。我似乎没有按照我的命令跳过'命令跳过'反复。
def executeScriptsFromFile(filename):
fd = open(filename, 'r')
sqlFile = fd.read()
fd.close()
# all SQL commands (split on ';')
sqlCommands = sqlFile.split(';')
# Execute every command from the input file
for command in sqlCommands:
try:
c.execute(command)
except OperationalError, msg:
print "Command skipped: ", msg
df = executescriptsfromfile(sqlpath)
答案 0 :(得分:14)
我有一个可能适合您的解决方案。它应该给你一个不错的小pandas.DataFrame
。
首先,您必须阅读sql文件中的查询。然后,只需使用pd.read_sql_query()
代替pd.read_sql()
我相信你知道,但这是函数的文档:http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.read_sql_query.html#pandas.read_sql_query
# Read the sql file
query = open('filename.sql', 'r')
# connection == the connection to your database, in your case prob_db
DF = pd.read_sql_query(query.read(),connection)
我可以向你保证它正在使用T-SQL,但我从未在MySQL上使用它。
答案 1 :(得分:1)
这是它如何为我工作的MWE:
from sklearn.preprocessing import LabelEncoder
import pandas as pd
df = pd.DataFrame({
'first_browser': ['Firefox', 'Chrome', 'Opera'],
'gender': ['Male', 'Female', 'Male'],
})
all_labelencoders = {}
cols = ['first_browser', 'gender'] # strings with names
for name in cols:
labelencoder = LabelEncoder()
all_labelencoders[name] = labelencoder
labelencoder.fit( df[name] )
df['labelencoder_' + name] = labelencoder.transform( df[name] )
print(all_labelencoders['first_browser'])
print(all_labelencoders['gender'])
#for name in cols:
# print(name, all_labelencoders[name])
print(df)
# inverse data
for name in cols:
encoder = all_labelencoders[name]
data = encoder.inverse_transform(df['labelencoder_' + name])
print(data)
我希望这会有所帮助。