簡體   English   中英

我怎樣才能使這個 python 代碼更有效率?

[英]How can I make this python code more efficient?

我意識到這是一種非常低效的編碼方式,所以我希望有人能就更有效的方法提出建議。

本質上,我正在嘗試創建一個列(“freq”),NA 和“Nothing”對象的值為 0,否則為 1。 樣本 df:

i   obj           freq

0.  Nothing        0
1.  Something      1
2.  NaN            0
3.  Something      1


for i in range(0,len(df)):
  if str(df["obj"].iloc[i]) == "Nothing" or str(df["obj"].iloc[i]) == NaN:
    d["freq"].iloc[i] = 0
  else:
    df["freq"].iloc[i] = 1

你可以使用 np.where()

import pandas as pd 
import numpy as np

df = pd.DataFrame({'obj': {0: 'Nothing', 1: 'Something', 2: np.nan, 3: 'Something'}})

df['freq'] = np.where((df['obj'] == 'Nothing') | (df['obj'].isnull()), 0, 1)

沒有 dataframe 很難檢查是否有效,但它應該

indexer = (df['obj'] == 'Nothing') | (df['obj'].astype(str) == 'NaN')
df.loc[indexer, 'freq'] = 0
df.loc[~indexer, 'freq'] = 1

在這種情況下,甚至沒有必要使用numpy

df['freq'] = (~(df.obj.isnull() | (df.obj == 'Nothing'))) * 1

筆記:

用“0”和“1”編碼有用嗎? 我們不能保留 boolean 操作的結果,同時保留“False”和“True”值嗎? 如果是這樣的話,答案就是:

df['freq'] = ~(df.obj.isnull() | (df.obj == 'Nothing'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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