为什么函数不应用于数据帧?Series对象没有名为query(Pandas)的属性

2024-04-25 11:55:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe用户和调用,其中公共列是user\u id。我需要在用户dataframe中删除chorn不为null的值,并删除调用中的那些user\u 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()

我正在创建一个函数,以使用筛选用户的用户id列表

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

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

calls.apply(new,axis=1)

AttributeError:“Series”对象没有属性“query” 为什么会出现这种错误


Tags: 用户nameiddataframedfdatefilterusers
2条回答

试试这个:

users_to_remove = users.loc[users.churn_date.notnull(), 'user_id']
filtered_calls = calls[~calls.user_id.isin(users_to_remove)]

当您运行calls.apply(some_action, axis=1)时,它将调用函数some_action来调用数据帧calls的所有行

因此,您应该更改new函数以处理pd.Series行,或者使用其他技术筛选用户。最简单的方法是使用^{}方法:

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

df.isin用于检查数据帧中的每个元素是否包含在值中

相关问题 更多 >