【发布时间】:2014-06-13 14:00:34
【问题描述】:
我正在编写一个函数部分,它应该遍历 Series 的行。该函数应该遍历传递给它的 DataFrame 列的行,即 df['col'],但是当我尝试使用 .iterrows 时,我收到一个错误,即 Series 没有该属性并使用 @ 987654326@ 产生以下错误。还有其他方法可以遍历列的行吗?我需要能够访问索引和列值。
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
【问题讨论】:
-
你为什么不创建一个小函数,你可以使用
.apply()[与数据框或系列]。这应该比使用 iterrows 和循环更快。 pandas.pydata.org/pandas-docs/dev/generated/… -
*另外,我注意到
DOC_mg/L列。很高兴看到你的进步!
标签: python python-2.7 pandas