python - 如何使用 Python/Pandas for-loop 在 for-loop 中读取带有查询参数的 SQLite 文件?
问题描述
我想从 SQLite 数据库中提取一些表。这些表具有不同的行数,因此将它们存储在 Python 列表中以方便进一步的数据分析是很自然的。以下代码有效。
import sqlite3
import pandas as pd
conn = sqlite3.connect("Database")
data = []
data.append(pd.read_sql("""SELECT ID,Time,A,B FROM Main WHERE BatchID=='BATCH1'""", conn))
data.append(pd.read_sql("""SELECT ID,Time,A,B FROM Main WHERE BatchID=='BATCH2'""", conn))
conn.close()
print(data[0]['Time'])
与其为每个 BatchID 重复代码,不如使用 for 循环,例如
conn = sqlite3.connect("Database")
data = []
batch = ['BATCH1', 'BATCH2']
for k in list(range(2)):
data.append(pd.read_sql("""SELECT ID,Time,A,B FROM Main WHERE BatchID='eval(batch[k])'""", conn))
conn.close()
print(data[0]['Time'])
但这不起作用。如果我尝试使用这种技术只读取一个表并显式编写 eval(batch[0]) ,那么我会得到一个只有键但没有数据的表。
根据要求,我添加了一些上下文来说明为什么我有一个 DataFrames 列表。我通常想要做的是轻松绘制一个图表,其中包含不同批次的 A 如何随时间变化的函数。感兴趣的批次集合可以是特定批次、或批次集合或全部。绘图的代码应该简单透明。
for k in batches: ax1.plot(data[k]['Time'], data[k]['A'])
但是这个命令行可能很简单,使用在 DataFrame 中选择所有带有选定变量的批次。我认为这里也是一个概念上的简单性,我们有一个绘图列表,我们使用上面的命令覆盖在同一个图中。
我也喜欢以类似的方式计算数据子集。
JPI93 下面建议的另一种方法是简化第一步,并制作一个大型 DataFrame,其中包含来自所有批次的数据以及所选变量。这导致制作我认为所需的图表的命令有点长。代码下方
...
data = pd.read_sql("""SELECT BatchID,ID,Time,A,B FROM Main""",conn)
index = []
index.append(data['BatchID'] == ' Batch1']
index.append(data['BatchID'] == ' Batch2']
batches = list(range(2))
然后我们可以使用以下命令进行绘图
for k in batches:ax1.plot(data.loc[index[k],'Time'],data.loc[index[k],'A'])
我倾向于支持上面的原始绘图命令,但是我需要解决制作 DataFrames 列表的原始问题。还是这里有一些其他方法可以使 plot 命令简单易读?
解决方案
如果您使用的是 Python 3.6+,请尝试格式化脚本:
conn = sqlite3.connect("Database")
data = []
batch = ['BATCH1', 'BATCH2']
for k in list(range(2)):
query = batch[k]
data.append(pd.read_sql(f"""SELECT ID,Time,A,B FROM Main WHERE BatchID='{query}'""", conn))
conn.close()
print(data[0]['Time'])
或者您可以使用旧式格式功能:
data.append(pd.read_sql(f"""SELECT ID,Time,A,B
FROM Main
WHERE BatchID='{}'""".format(query),
conn))
推荐阅读
- r - 使用因子函数分配标签
- c# - 我正在尝试使用 for 循环来添加一个数字,但它工作不正常
- javascript - 如何从 Sequelize 的所有查询中排除 createdAT 和 updatedAt?
- ios - MessagesExtension App 的 UIAppearance 协议
- whitespace - h3 标记未能为空格提供无换行
- python - 蓝牙连接arduino读写特性
- python - 如何让函数动态运行两次
- flutter - 为什么 Future.delayed(Duration(microseconds:n(ps:n<1000)),fun) 比 Future(fun) 快?
- python - 解析和转换 GPS 加密狗的输出
- javascript - 为什么我的 API 从 fetch 调用中获取未定义的值?