如何从Pandas DataFrame单行筛选结果中提取单个标量数值
问题原因
你执行id["ID"]拿到的不是单个数值,是长度为1的pandas Series对象。client_stats方法内执行orders["member_id"]==id逻辑时,等号两端都是Series类型,pandas要求两个Series的索引完全一致才能逐元素比对,二者索引不匹配就会抛出你遇到的错误。
解决方法
要拿到Series里存储的单个标量值,有以下几种常用方案,任选一种即可:
- 方案1:用
iloc[0]按位置取第一个值(兼容性最好,不受索引值影响)
# 先提取标量ID再传入方法 user_id = id["ID"].iloc[0] order_history_month = calc.client_stats(user_id, df_orders)
- 方案2:用
item()方法直接提取单元素Series的标量值
order_history_month = calc.client_stats(id["ID"].item(), df_orders)
- 方案3:转换为numpy数组后取第一个值
order_history_month = calc.client_stats(id["ID"].to_numpy()[0], df_orders)
以上任意一种方法提取出的ID都是纯数值类型,传入方法后pandas会自动将该数值和member_id列的每一行元素做比对,不会再触发索引匹配的错误。
内容的提问来源于stack exchange,提问作者Sebastian Naitsabes
相关产品推荐
相关产品推荐

