簡體   English   中英

迭代函數中的Pandas系列行

[英]Iterating through rows of a Pandas series within a function

我正在編寫一個函數部分,它應該迭代Series的行。 該函數應該遍歷傳遞給它的DataFrame列的行,即df ['col'],但是當我嘗試使用.iterrows我得到一個錯誤, Series沒有該屬性,使用.iteritems產生下面的錯誤。 有沒有其他方法來遍歷列的行? 我需要能夠訪問索引和列值。

def get_RIMsin(df, obs, rimcol):
    """dataframe, obs column,rim column"""    
    maxval =df['Mmedian'].max()
    minval =df['Mmedian'].min()
    dfrange = maxval-minval
    amplitude = dfrange/2

    convert = (2*np.pi)/365
    startday = obs.idxmax().dayofyear
    sinmax = 91

    for row in rimcol.iteritems: #This is where I'd like to go through rows of a series
        diff = sinmax - startday
        adjday = row.dayofyear + diff
        adjsin = np.sin(adjday * convert)
        df['RIMsine'] = row + adjsin
    return df

get_RIMsin(sve_DOC, sve_DOC['DOC_mg/L'], sve_DOC['RIMsDOC'])

TypeError                                 Traceback (most recent call last)
<ipython-input-98-4811cbf80e78> in <module>()
     17     return df
     18 
---> 19 get_RIMsin(sve_DOC, sve_DOC['DOC_mg/L'], sve_DOC['RIMsDOC'])
     20 """get_RIM2(svv_DOC, svv_DOC['DOC_mg/L'], svv_DOC['RIMsDOC'])
     21 get_RIM2(svw_DOC, svw_DOC['DOC_filt_mg/l'], svw_DOC['RIMsDOC'])

<ipython-input-98-4811cbf80e78> in get_RIMsin(df, obs, rimcol)
     10     sinmax = 91
     11 
---> 12     for row in rimcol.iteritems:
     13         diff = sinmax - startday
     14         adjday = row.dayofyear + diff

TypeError: 'instancemethod' object is not iterable

使用:

rimcol.iteritems()

由於iteritems()是一個函數,因此必須包含括號。 否則,您將獲得實例方法對象,而不是該實例方法返回的迭代器。

正如Ryan G在評論中指出的那樣,這實際上都不需要行迭代。 我認為這個(未經測試的!)代碼是等價的。

convert = (2*np.pi)/365
sinmax = 91

def get_RIMsin(df, obs, rimcol):
    """dataframe, obs column,rim column"""    
    amplitude = df['Mmedian'].ptp()/2

    startday = obs.idxmax().dayofyear

    diff = sinmax - startday
    adjday = rimcol + diff
    adjsin = np.sin(adjday * convert)
    df['RIMsine'] = adjsin
    return df

暫無
暫無

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

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