为何用pandas apply+lambda筛选RGN图像时输出非DataFrame?
问题原因分析与解决办法
核心原因:你筛选RGN图像时的apply用法错误,导致返回的是包含行数据和
None的Series(object类型),而非DataFrame。具体场景:
筛选不含'rgn'的RGB图像时,你大概率用了布尔索引的正确写法:rgb_df = df[df.apply(lambda x: 'rgn' not in x['Image_id'], axis=1)]这里
apply(axis=1)返回的是布尔值组成的Series,用它给原DataFrame做索引,自然得到筛选后的DataFrame。但筛选含'rgn'的RGN图像时,你可能误写成了直接返回行数据的形式:
# 错误写法,返回的是object类型的Series rgn_df = df.apply(lambda x: x if 'rgn' in x['Image_id'], axis=1)这种写法下,条件满足时返回整行数据,不满足时默认返回
None,最终得到的是一个元素为行数据或None的Series,而非DataFrame。正确写法:和筛选RGB保持一致,用布尔索引:
rgn_df = df[df.apply(lambda x: 'rgn' in x['Image_id'], axis=1)]更高效的替代方案:无需使用
apply,直接用pandas字符串方法更高效,尤其适合大数据量场景:# 筛选RGB图像 rgb_df = df[~df['Image_id'].str.contains('rgn')] # 筛选RGN图像 rgn_df = df[df['Image_id'].str.contains('rgn')]
内容的提问来源于stack exchange,提问作者Youseef Moemen
相关产品推荐
相关产品推荐

