我有一個包含 3 行的 CSV 檔案:“用戶名”、“日期”、“節能”,我想按日期匯總特定用戶的“節能”。

例如,如果username = 'merrytan',我如何列印所有帶有“merrytan”的行,以便按日期匯總節省的總能量?(日期:2022 年 2 月 24 日總節能 = 1001,日期:2022 年 2 月 24 日總節能 = 700)
我是 python 的初學者,通常我會使用 pandas 來解決這個問題,但是這個專案不允許這樣做,所以我完全不知道從哪里開始。我將不勝感激任何幫助和指導。謝謝你。
uj5u.com熱心網友回復:
我打開 csv 檔案的替代方法是使用原生 python 的 csv 模塊。您將它們作為“檔案”讀取,然后提取您需要的值。我使用第一列進行過濾,只保留相關列中的相等索引值。(這是 thrid 和索引 2。)
import csv
energy_saved = []
with open(r"D:\test_stack.csv", newline="") as csvfile:
file = csv.reader(csvfile)
for row in file:
if row[0]=="merrytan":
energy_saved.append(row[2])
energy_saved = sum(map(int, energy_saved))
現在你有一個只關注值的串列,你可以在之后對它們求和。
編輯-所以,我剛剛意識到我完全忽略了您請求的時間部分,哈哈。這是更新。
import csv
my_dict = {}
with open(r"D:\test_stack.csv", newline="") as file:
for row in csv.reader(file):
if row[0]=="merrytan":
my_dict[row[1]] = my_dict.get(row[1], 0) int(row[2])
因此,我們還需要獲取檔案的日期列。我們需要展示兩個“行”,但是當 Pandas 被禁止時,我們將以日期為鍵,能量為值去字典。
但是您的日期列具有重復的值(無論是有意還是無意),并且字典要求鍵是唯一的。所以,我們使用一個回圈。您將一個又一個日期值作為鍵和相應的能量作為值添加到新字典中,但是當它已經存在時,您將改為與現有值求和。
uj5u.com熱心網友回復:
我會將您的 CSV 檔案轉換為兩級字典,以用戶名和日期為鍵
infile = open("data.csv", "r").readlines()
savings = dict()
# Skip the first line of the CSV, since that has the column names
# not data
for row in infile[1:]:
username, date_col, saved = row.strip().split(",")
saved = int(saved)
if username in savings:
if date_col in savings[username]:
savings[username][date_col] = savings[username][date_col] saved
else:
savings[username][date_col] = saved
else:
savings[username] = {date_col: saved}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433958.html
下一篇:錯誤:“TypeError:float()引數必須是字串或數字,而不是'NoneType'”,但沒有'NoneType'?
