为什么函数不适用于数据帧?系列对象没有称为查询(熊猫)的属性



我有一个数据帧用户,并在公共列user_id的地方调用。我需要在流失不为 null 的用户数据帧中删除值,并在调用中删除这些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()

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

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

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

calls.apply(new,axis=1)

属性错误:"系列"对象没有属性"查询" 为什么会出现此错误?

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

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

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

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

试试这个:

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

最新更新