如何用最Pythonic的方式删除DataFrame中指定列列表长度为X的行?
高效删除DataFrame中指定列列表长度为X的行
对于你的需求,最Pythonic且高效的方式是利用pandas的矢量化操作,完全避免显式循环。以下是两种最优实现:
方法一:使用str.len()(推荐,最高效)
str.len()是pandas专为序列设计的矢量化方法,对列表类型的列也能直接生效,内部由优化过的C代码执行,速度远快于Python层面的循环或普通apply。
import pandas as pd data = {'column_1': ['1', '2', '3'], 'column_2': [['A','B'], ['A','B','C'], ['A']], 'column_3': ['a', 'b', 'c']} df = pd.DataFrame.from_dict(data) # 删除column_2中列表长度为3的行 filtered_df = df[df['column_2'].str.len() != 3] print(filtered_df)
输出结果:
column_1 column_2 column_3 0 1 [A, B] a 2 3 [A] c
方法二:使用apply(len)
如果你的列中存在非列表类型元素(比如偶尔的None或字符串),str.len()可能报错,此时可以用apply(len),它会逐个调用Python的len()函数,虽然效率略低于str.len(),但依然是无显式循环的Pythonic写法:
filtered_df = df[df['column_2'].apply(len) != 3]
关键说明
- 矢量化操作是pandas的核心优势,能最大程度利用底层优化,处理大规模数据时性能差距尤为明显。
- 两种方法都无需手动写循环,符合Pythonic的简洁风格。
内容的提问来源于stack exchange,提问作者Tonino Fernandez
相关产品推荐
相关产品推荐

