【发布时间】:2020-04-25 02:55:48
【问题描述】:
我从 pandas.DataFrame.apply() 得到一个 AttributeError。尽管如此,该功能似乎可以工作,但我想更好地理解 apply() ,所以我还是发布了这个问题......
我有两个数据框,如下所示:
a = pd.DataFrame(data = {
'ID': ['123', '456', '789'],
'TIME': [1.5, 2, 3]
})
b = pd.DataFrame(data = {
'ID': ['123', '456', '789'] * 2,
'TIME_START': [1, 3, 3, 2, 1, 5],
'TIME_END': [5, 4, 6, 6, 3, 6],
'CORR_KEY': ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr']
})
我像这样合并它们:
c = a.merge(b, how = 'inner', on = 'ID')
我得到以下信息:
print(c)
ID TIME TIME_START TIME_END CORR_KEY
0 123 1.5 1 5 abc
1 123 1.5 2 6 jkl
2 456 2.0 3 4 def
3 456 2.0 1 3 mno
4 789 3.0 3 6 ghi
5 789 3.0 5 6 pqr
现在我需要在 TIME_START TIME TIME_END 为 FALSE 的 c 中删除记录。这样,我最终只得到了具有相关 CORR_KEY 的记录。 (例如,ID 123 的正确 CORR_KEY 是 abc,而不是 jkl。)
我使用以下函数,并沿数据框应用它:
def drop_records(df):
start_condition = df['TIME_START'] <= df['TIME']
end_condition = df['TIME'] <= df['TIME_END']
df.drop(df[~(start_condition) | ~(end_condition)].index, inplace = True)
return df
c = c.apply(drop_records(c))
结果是:
AttributeError: 'ID' 不是 'Series' 对象的有效函数
但是,再次检查 c,我得到了预期的输出:
print(c)
ID TIME TIME_START TIME_END CORR_KEY
0 123 1.5 1 5 abc
3 456 2.0 1 3 mno
4 789 3.0 3 6 ghi
那么,导致 AttributeError 的原因是什么?
谢谢!
【问题讨论】:
标签: python pandas dataframe apply