首页 > 解决方案 > 为什么函数不适用于数据框?系列对象没有称为查询的属性(熊猫)

问题描述

我有一个数据框用户,并且调用了公共列是 user_id 的地方。我需要在 churn 不为空的用户数据框中删除值并删除调用中的那些 user_id 行。

users = user_id,first_name,last_name,age,city,reg_date,plan,churn_date
1000,Anamaria,Bauer,45,"Atlanta-Sandy Springs-Roswell, GA MSA",2018-12-24,ultimate,
1001,Mickey,Wilkerson,28,"Seattle-Tacoma-Bellevue, WA MSA",2018-08-13,surf,
1002,Carlee,Hoffman,36,"Las Vegas-Henderson-Paradise, NV MSA",2018-10-21,surf,
1003,Reynaldo,Jenkins,52,"Tulsa, OK MSA",2018-01-28,surf,
1004,Leonila,Thompson,40,"Seattle-Tacoma-Bellevue, WA MSA",2018-05-23,surf,
1005,Livia,Shields,31,"Dallas-Fort Worth-Arlington, TX MSA",2018-11-29,surf,
1007,Eusebio,Welch,42,"Grand Rapids-Kentwood, MI MSA",2018-07-11,surf,
1008,Emely,Hoffman,53,"Orlando-Kissimmee-Sanford, FL MSA",2018-08-03,ultimate,
1009,Gerry,Little,19,"San Jose-Sunnyvale-Santa Clara, CA MSA",2018-04-22,surf,
1010,Wilber,Blair,52,"Dallas-Fort Worth-Arlington, TX MSA",2018-03-09,surf,
calls = id,user_id,call_date,duration
1000_93,1000,2018-12-27,8.52
1000_145,1000,2018-12-27,13.66
1000_247,1000,2018-12-27,14.48
1000_309,1000,2018-12-28,5.76
1000_380,1000,2018-12-30,4.22
1000_388,1000,2018-12-31,2.2
1000_510,1000,2018-12-27,5.75
1000_521,1000,2018-12-28,14.18
1000_530,1000,2018-12-28,5.77
1000_544,1000,2018-12-26,4.4
filter_user = users[users['churn_date'].notnull()]["user_id"].tolist()

我正在创建一个函数来使用来自 filter_user 的 user_id 列表

def new(df):
    df = df.query('user_id != @filter_user')
    return df

我想应用其他数据框并从 filter_user 中删除包含 user_ids 的行,这就是为什么将上述函数应用于其他数据框

calls.apply(new,axis=1)

AttributeError: 'Series' object has no attribute 'query' 为什么会出现这个错误?

标签: pythonpandasnumpydataframedata-science

解决方案


当你运行时calls.apply(some_action, axis=1),它会调用some_action你数据框的所有行的函数calls

因此,您应该更改new函数以使用pd.Series行数,或者使用其他技术过滤用户。最简单的方法是使用df.isin()方法:

df = df[ df.user_id.isin(filter_user ) ]

df.isin用于检查 DataFrame 中的每个元素是否包含在值中。


推荐阅读