[英]How to avoid repeating expressions when analysing data?
我是編程新手,被要求編寫一些代碼來分析 NoSQL 數據庫並制作儀表板。 該任務涉及生成滿足特定條件的行數。
我決定掃描我的數據庫,將其放入 Pandas 數據框中並在其上運行 .query() 以提高可讀性。 我也聽說過關於熊貓速度的好消息。 但是,我需要大量重復我的代碼才能獲得所需的所有字段,例如:
data1=df.query("a > 0").shape[0]
data2=df.query("a > 0 & d=='yes'").shape[0]
data3=df.query("a > 0 & d=='no'").shape[0]
如果使用 if 語句,情況會更糟。 是否有一種更少重復、更干燥的方式來做到這一點? 我想出的一件事是一個“表達式表”,下面是偽代碼。 有沒有辦法在python中做類似的事情? 或者更好的東西?
where a > 0 where b > 0 where c == 1
all results 3 7 5
where d=='yes' 1 3 4
where d=='no' 2 4 1
我建議將重復的部分提取到一個函數中:
def get_result_size(cond1, cond2):
return df.query(f"{cond1} & {cond2}").shape[0]
然后你可以將你的第一個例子重寫為
data1=get_result_size("a > 0", 'True')
data2=get_result_size("a > 0", "d=='yes'")
data3=get_result_size("a > 0", "d=='no'")
要生成結果表,您可以編寫兩個循環,一個在另一個循環中。 外循環在您的行中循環。 內循環跨越列循環。
請注意,像這樣使用 query() 效率不高 - Pandas 會多次重新計算相同的內容。 例如,上面的代碼針對整個數據幀評估a > 0
3 次a > 0
,即使它只需要執行一次。 不過,這對您的應用程序來說可能沒問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.