【发布时间】:2021-09-10 19:18:27
【问题描述】:
我有一个数据框和一个 500 万行的本地 Postgres 数据库。在数据框的每一行中,我想添加一列,它是针对 Postgres 数据库的查询结果。
这就是我现在拥有的:
for index, row in df_tf.iterrows():
row = dict(row)
id = row['National ID']
q = 'select name from companies where company_number=%s'
cursor.execute(q, [company_number])
results = cursor.fetchall()
if len(results):
row['name'] = result[0][0]
writer.writerow(row)
else:
row['name'] = ''
writer.writerow(row)
所以我正在遍历行并将结果写入本地 CSV。
有没有一种方法可以让我更简洁地做到这一点,并将结果保存在本地数据框中?
我知道我可以将 Postgres 数据加载到 pandas 中并直接加入,但它相当大而且速度很慢,所以我更喜欢使用 Postgres 查询。
【问题讨论】:
-
由于您只使用第一个结果,
fetchone()可能有助于整理并更快 -
df的平均大小是多少? -
@P.Naoum 它不是很大,大约 80,000 行。 Postgres 数据更大,大约 500 万行 / 2.5GB。我可以将它加载到内存中,但我不希望这样做(而且我也对内存太大的数据集的答案感兴趣!)。