簡體   English   中英

使用 pandas 循環通過 dataframe 時使用 if/else 語句的最快方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM