如何在Pandas中筛选分类列的指定类别数据?
Pandas筛选指定类别DataFrame的正确方法
问题场景
现有如下Pandas DataFrame:
id gender articleType baseColour season usage 0 15970 Men Shirts Blue Fall Casual 1 39386 Men Jeans Blue Summer Casual 2 59263 Women Watches Silver Winter Casual 3 21379 Men Sport Pants Black Fall Casual 4 53759 Men Tshirts Grey Summer Casual
其中articleType列包含约60个不同类别,需要仅保留以下指定类别:
category = ['Tshirts', 'Shirts', 'Casual Shoes', 'Watches', 'Beauty Product', 'Sports Shoes', 'Kurtas', 'Tops', 'accessories', 'Briefs', 'Sport Pants', 'Shorts', 'Formal Shoes', 'Jeans', 'Trousers', 'Kurtis', 'Dresses', 'Sarees', 'Jackets']
尝试使用df[(df['articleType'] == category)]筛选时,出现报错:
ValueError: ('Lengths must match to compare', (44077,), (19,))
正确解决方法
报错原因是直接用==做比较时,Pandas会尝试逐元素匹配,但DataFrame的articleType列长度(44077)和category列表长度(19)不匹配,导致无法对比。
正确的做法是使用Pandas的isin()方法,它专门用于检查元素是否存在于指定列表中:
# 筛选符合指定类别的行 filtered_df = df[df['articleType'].isin(category)]
也可以使用query()方法,语法更简洁直观:
filtered_df = df.query("articleType in @category")
isin()会返回一个布尔型Series,标记每一行的articleType是否在目标列表内,用这个布尔Series索引原DataFrame即可得到筛选结果;query()方法中用@符号引用外部定义的category变量,实现相同的筛选逻辑。
内容的提问来源于stack exchange,提问作者Adarsh Wase
相关产品推荐
相关产品推荐

