我正在使用使用 gspread 在 google 电子表格上输入的值构建一个列表列表。然后,最终的列表列表将使用
worksheet.update()
填充工作表
名单如下:
[['Date', 'Description', 'Income', 'Expense', 'Currency', 'Exchange Rate', 'Bank account', 'Converted amount', 'Converted currency', 'Total expenses £', 'Total expenses €'],
['2024-06-06', 'Gardener', '', '500', '£', '1.191', 'bank name', 595.5, '€'],
['2024-07-15', 'Keys cut', '', '16', '£', '1.1902', 'bank name', 19.0432, '€'],
['2024-07-15', 'Skip hire', '', '300', '£', '1.1902', 'bank name', 357.06, '€']]
我想对“费用”列下的所有字符串求和,即“500”、“16”和“300”。我还想对“转换金额”列下的浮点数求和,即 595.5、19.0432 和 357.06。然后我想将这些总和附加到列表列表的第二行。
我尝试过的:
for row in list_of_lists[1:]:
total_gbp = []
expense_gbp = float(row[3])
total_gbp.append(expense_gbp)
list_of_lists[1].append(sum(total_gbp))
total_eur = []
expense_eur = row[7]
total_eur.append(expense_eur)
list_of_lists[1].append(sum(total_eur))
如果我
print(list_of_lists)
,我得到:
[['Date', 'Description', 'Income', 'Expense', 'Currency', 'Exchange Rate', 'Bank account', 'Converted amount', 'Converted currency', 'Total expenses £', 'Total expenses €'],
['2024-06-06', 'Gardener', '', '500', '£', '1.191', 'bank name', 595.5, '€', 500.0, 595.5, 16.0, 19.0432, 300.0, 357.06],
['2024-07-15', 'Keys cut', '', '16', '£', '1.1902', 'bank name', 19.0432, '€'],
['2024-07-15', 'Skip hire', '', '300', '£', '1.1902', 'bank name', 357.06, '€']]
所以它是附加元素而不是总和
在 for 循环输出中插入
print(total_gbp)
:
[500]
[16]
[300]
我不明白为什么它不是如下列表:
[500, 16, 300]
你的意思是这样的吗:
total_gbp = 0
total_eur = 0
for row in list_of_lists[1:]:
total_gbp += float(row[3])
total_eur += float(row[7])
list_of_lists[1].append(total_gbp)
list_of_lists[1].append(total_eur)
输出:
['Date', 'Description', 'Income', 'Expense', 'Currency', 'Exchange Rate', 'Bank account', 'Converted amount', 'Converted currency', 'Total expenses £', 'Total expenses €']
['2024-06-06', 'Gardener', '', '500', '£', '1.191', 'bank name', 595.5, '€', 816.0, 971.6032]
['2024-07-15', 'Keys cut', '', '16', '£', '1.1902', 'bank name', 19.0432, '€']
['2024-07-15', 'Skip hire', '', '300', '£', '1.1902', 'bank name', 357.06, '€']
您在每个循环中重新声明
total_gbp
和 total_eur
。相反,您应该更改 total_gbp
和 total_eur
的范围。
total_gbp = []
total_eur = []
for row in list_of_lists[1:]:
expense_gbp = float(row[3])
total_gbp.append(expense_gbp)
expense_eur = row[7]
total_eur.append(expense_eur)
list_of_lists[1].append(sum(total_gbp))
list_of_lists[1].append(sum(total_eur))
您是否有任何理由不考虑使用 pandas 而不是尝试推理列表列表和混合类型?
如果将电子表格转换为 pandas 数据框,则可以轻松推理列和列类型,并对它们求和。如果你有大的列,这会更容易,也更高效。
https://docs.gspread.org/en/v6.0.0/user-guide.html#using-gspread-with-pandas