Pandas 如何在含列表的DataFrame中搜索值并返回对应类型
解决方案
1. 输出纯净结果的修改方法
你当前代码输出带索引和类型信息,是因为筛选后得到的df['type']是Series结构,直接打印会携带元信息。只需要在取type值时调用.item()方法即可拿到纯字符串结果,修改打印语句即可:
# 把原来的打印语句替换为下面的内容即可 print('You detected: ', df['type'].item())
如果存在多个匹配结果,可以用.tolist()把所有匹配类型转成列表输出。
2. 搜索方案的优化建议
你当前的实现不是最优方案:将列表列转成新DataFrame的方式,当group字段的列表长度差异较大时,会生成大量空值列,既浪费内存也影响查询效率,且可读性较差。
更简单高效的写法是直接用apply遍历判断目标值是否在列表中,代码更简洁易懂:
import pandas as pd data = { "type": ['animal', 'car'], "group": [['cat', 'dog', 'bird'], ['chevy', 'ford', 'nissan', 'holden', 'bently']] } df = pd.DataFrame(data) find = 'dog' # 搜索单值直接传字符串即可,不需要包装成列表 # 生成匹配掩码 mask = df['group'].apply(lambda x: find in x) # 取值前加判断,避免搜索值不存在时报错 if mask.any(): res = df.loc[mask, 'type'].item() print(f'You detected: {res}') else: print(f'未找到与{find}匹配的类型')
这个方案不需要额外生成临时DataFrame,在列表长度差异大的场景下性能优势更明显,代码逻辑也更易维护。
内容的提问来源于stack exchange,提问作者zeroalpha
相关产品推荐
相关产品推荐

