Python 用于Jupyter笔记本中的循环和字符串格式化
我定义了以下元组:Python 用于Jupyter笔记本中的循环和字符串格式化,python,pandas,for-loop,string-formatting,Python,Pandas,For Loop,String Formatting,我定义了以下元组: stocks = ('san', 'bbva', 'ele') 我使用for循环为每个股票运行查询: for i in stocks: queryTp = """SELECT date,close FROM %s _prices WHERE date >= '%s' """ % (i, datetime(2000,1,3)) 问题是,当我在终端上运行时,查询被完美地存储在query
stocks = ('san', 'bbva', 'ele')
我使用for循环为每个股票运行查询:
for i in stocks:
queryTp = """SELECT date,close
FROM %s _prices
WHERE date >= '%s' """ % (i, datetime(2000,1,3))
问题是,当我在终端上运行时,查询被完美地存储在queryTp
:
ipdb> queryTp
"\tSELECT\tdate,close \n \t\t\t\tFROM san_prices \n \t\t\t\tWHERE date >=
'2000-01-03 00:00:00' "
但是,在Jupyter笔记本上运行时,查询存储为
"\tSELECT\tdate,close FROM s_prices WHERE date >= '2000-01-03 00:00:00' "
起初我认为这与字符串格式化有关。然而,datetime(2000,1,3)
的介绍很好。然后我意识到变量I
不是迭代stocks
值(即'san',bbva',ele'
),而是迭代变量名。换句话说,当执行打印(i)
时,我获得值“s”:
print(i)
's'
对我有用。结果:
SELECT date,close
FROM san _prices
WHERE date >= '2000-01-03 00:00:00'
SELECT date,close
FROM bbva _prices
WHERE date >= '2000-01-03 00:00:00'
SELECT date,close
FROM ele _prices
WHERE date >= '2000-01-03 00:00:00'
您在终端和笔记本上运行的python版本是什么
编辑:
你确定你正在用全部3只股票来测试这个吗?如果使用以下代码仅在一台计算机上进行测试:
stocks = ('san')
for i in stocks:
queryTp = """SELECT date,close
FROM %s _prices
WHERE date >= '%s' """ % (i, datetime(2000,1,3))
print(queryTp)
它实际上将返回:
SELECT date,close
FROM s _prices
WHERE date >= '2000-01-03 00:00:00'
SELECT date,close
FROM a _prices
WHERE date >= '2000-01-03 00:00:00'
SELECT date,close
FROM n _prices
WHERE date >= '2000-01-03 00:00:00'
这是有意义的,因为“san”被视为iterable,因为字符串在每个字符上都是iterable。(例如,[abc'中的x代表x]返回['a'、'b'、'c'])如果只想在一只股票上测试代码,则应创建如下循环:
stocks = ('san',)
for i in stocks:
queryTp = """SELECT date,close
FROM %s _prices
WHERE date >= '%s' """ % (i, datetime(2000,1,3))
print(queryTp)
它返回一条语句:
SELECT date,close
FROM san _prices
WHERE date >= '2000-01-03 00:00:00'
我也在使用jupyter笔记本,你的代码对我来说很好,你应该检查你的tupleThat是否有趣。您是否在终端上运行脚本或使用Jupyter笔记本?我正在运行包含Python 3.5.3的anaconda 4.0,我在一个笔记本中运行它,其中有一个3.6.1内核,但我没有看到经过编辑的版本!你说得对,我开始用3只股票,然后换成一只。非常感谢!很高兴帮忙:)祝你好运
SELECT date,close
FROM san _prices
WHERE date >= '2000-01-03 00:00:00'