python - 如何将循环结果存储到一 (1) 个数据帧中?
问题描述
我有一些 python 代码在不同的“数据库”中运行一个循环并分别存储每个数据库。如何将十 (10) 个循环中的内容保存到一个可以保存/导出或推送到 Google 表格的数据框中?
下面是我的代码的预览:
USERNAME = 'email'
PASSWORD = 'password'
DATABASES = [ 'DB1', 'DB2', 'DB3', 'DB4', 'DB5', 'DB6', 'DB7', 'DB8', 'DB9', 'DB10' ]
def get_dataframe(db):
client = my.API(username=USERNAME, password=PASSWORD, database=db)
client.authenticate()
device_status = client.get("DeviceStatusInfo")
device_serial = client.get("Device")
df = pandas.DataFrame(device_serial)
ids = list(df['id'])
sn = list(df['serialNumber'])
nm = list(df['name'])
cm = list(df['comment'])
dt = list(df['deviceType'])
di = pandas.DataFrame(device_status)
device_ids = di['device']
dev_id = []
for device_id in device_ids:
dev_id.append(device_id['id'])
di['id'] = pandas.Series(dev_id)
d = {
'id':ids,
'serialNumber':sn,
'name':nm,
'comment':cm,
'deviceType':dt
}
df2 = pandas.DataFrame(d)
dfo = pandas.merge(di, df2, on='id')
print(dfo)
return dfo
此外,这是下面的循环:
def main():
for db in DATABASES:
df = get_dataframe(db)
gc = gspread.service_account(filename='creds.json')
sh = gc.open_by_key('1vToay2IueDcV0gzu6MCehcMUU6Frea1fa3lqjpoKdSs')
worksheet = sh.get_worksheet(0)
dfo = pandas.DataFrame(df)
set_with_dataframe(worksheet, dfo)
if __name__ == '__main__':
main()
任何人的帮助将不胜感激!提前致谢!
解决方案
我不确定我是否完全理解您的问题,我仍然无法添加评论,但您是否尝试过在循环之外创建一个空数据框,然后使用 concat,例如:
def main():
final_df=pandasd.DataFrame(columns=['your column names'])
for db in DATABASES:
df = get_dataframe(db)
final_df=pandas.concat([df,final_df])
gc = gspread.service_account(filename='creds.json')
sh = gc.open_by_key('1vToay2IueDcV0gzu6MCehcMUU6Frea1fa3lqjpoKdSs')
worksheet = sh.get_worksheet(0)
set_with_dataframe(worksheet, final_df)
if __name__ == '__main__':
main()
PS:这种方法很慢,更好的方法是始终将数据库存储为 numpy 数组,并且仅在循环之后创建数据框,因为使用 pandas 数据框很慢。
推荐阅读
- javascript - 高效地将 JavaScript 键和值数组转换为对象
- elasticsearch - Elasticsearch:使用数组搜索包含数组的字段
- clojurescript - 试剂 - 将 ui 状态与(或分开?)服务器持久状态一起存储的方法?
- python - 从 Python 中的 iso 日期时间戳中提取星期几和小时
- python - Python中与列的复杂分离
- sql-server - 第一次运行每晚重新编译的存储过程非常慢,然后快得多
- python - 使用这种解决 Python 导入问题的特殊方式,您会看到哪些问题(命名空间..权限..等)?
- arrays - 将对象推送到数组反应本机
- c# - 有没有办法在 EF Core 中模拟视图?
- perl - 变量声明可以放在通用脚本中吗