python - 如何避免 for 循环并在此代码中使用替代方法(python 和 postgres sql)?下面是我的代码
问题描述
##这是我的代码。我想在这里摆脱 for 循环。您能否建议一种可用于相同逻辑的python中的替代方法##
usa_records = cursor.fetchall()
for k in csv_files:#reading csv files
with open(k, 'r') as f:
reader = csv.reader(f)
next(reader) # Skip the header row.
for row in reader:
status = 0
for m in usa_records:
if (m[6] == row[6]):
status = status + 1
row[0] = m[0] if m[0] is not None else row[0]
row[1] = m[1] if m[1] is not None else row[1]
row[2] = m[2] if m[2] is not None else row[2]
row[3] = m[3] if m[3] is not None else
row[17] = m[17] if m[17] is not None else row[17]
sql_update_query = """Update usa set technology=%s, company_name=%s,contact_name=%s,first_name=%s,last_name=%s,title=%s,email=%s,person_linkedin_url=%s,web_address=%s,company_linkedin_url=%s,company_address=%s,city=%s,state=%s,company_phone=%s,employees=%s,industry=%s,country=%s where id = %s"""
cursor.execute(sql_update_query,
(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8],
row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16],
row[17]))
conn.commit()
row_count = cursor.rowcount
print(row_count, "Records Updated")
break
else:
pass
if status == 0:
cursor.execute(
"INSERT INTO usa VALUES (%s, %s, %s, %s,%s, %s, %s, %s,%s, %s, %s, %s,%s, %s, %s, %s,%s,%s)",
row)
conn.commit()
print("created new data")
解决方案
看看熊猫。看起来你正在做的大部分事情都可以通过一些简单的数据框操作来完成。例如读取一个csv: https ://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
而不是循环遍历行,您可以使用.apply
:https ://pandas.pydata.org/docs/reference/api/pandas.DataFrame.apply.html
推荐阅读
- assembly - 在 ARMv7 的有效载荷中调用函数
- android - 如何禁用在edittext之外单击的效果
- javascript - 无法使用 Electron-Winstaller 找到模块“./installers/setupEvents”
- python - 使用 Django ORM 查找不是任何外键目标的对象
- reactjs - React/Redux + firestore 无法读取未定义的属性“参数”
- c - 与 printf 输出和 execv 的叉子问题
- three.js - THREE.JS:从其位置计算相机FOV,反之亦然
- dax - DAX - 根据测试完成顺序创建类别
- javascript - AngularJS 使用 selectize 和 ng-repeat 设置多选下拉列表的值
- chronicle - 编年史队列大小确定