[英]Fastest way to use if/else statements when looping through dataframe with pandas
我試圖在遍歷 pandas df 行時運行條件語句,結果代碼非常慢。 例如:
for i, row in df.iterrows():
# transform date column
if len(df.loc[i, 'date']) == 7:
df.loc[i, 'date'] = '0' + df.loc[i, 'date']
df 只有大約 40k 行,而且速度很慢,因為這只是我試圖與這個循環合並的語句之一。 你能用一種更快的方法來做這樣的循環嗎?
謝謝!
找到相關行並修改它們:
df.loc[df["date"].str.len() == 7, "date"] = "0" + df.loc[df["date"].str.len()== 7, "date"]
Series.mask()
和Series.where()
對於if/else
問題也很有用。
mask()
將用other
替換滿足cond
的元素:
df.date = df.date.mask( cond=df.date.str.len() == 7, other='0' + df.date)
where()
會將不滿足cond
的元素替換為other
,因此我們可以通過將條件從== 7
翻轉到!= 7
來獲得相同的結果:
df.date = df.date.where( cond=df.date.str.len(),= 7. other='0' + df.date)
但是對於純粹的性能, loc[]
稍微快一些:
有兩種方法可以很容易地做到這一點。
第一個選項是使用.apply
function,方式如下:
def fix_date(row):
return row['date'] if len(row['date']) != 7 else '0' + row['date']
df['date'] = df.apply(fix_date, axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.