Pandas如何删除指定列中包含超过1个连字符的行
解决方案
你需要的筛选功能可以通过pandas内置的字符串统计方法快速实现,核心逻辑是统计目标列中连字符-的出现次数,仅保留次数等于1的行即可。
完整实现代码
import pandas as pd import datetime as dt df = pd.DataFrame({ 'apple_pie': ["Hong Kong - London - New York", "Fuji Apple - Best apple pie"], 'shipped_date': ["2021-09-23 21:24:06", "2021-09-25 11:24:06"] }) # 核心筛选逻辑:仅保留apple_pie列包含1个连字符的行,不会统计shipped_date等其他列的连字符 df = df[df['apple_pie'].str.count('-') == 1] print(df)
输出结果
apple_pie shipped_date 1 Fuji Apple - Best apple pie 2021-09-25 11:24:06
逻辑说明
Series.str.count('-')是pandas针对字符串列的内置方法,逐行统计指定字符的出现次数,性能远高于自行遍历循环- 如果目标列存在非字符串类型的值,可以先转成字符串再统计避免报错,写法调整为
df['apple_pie'].astype(str).str.count('-') == 1 - 如果你的需求是统计整行所有列的连字符总数量,用以下写法即可:
df = df[df.apply(lambda x: x.str.count('-').sum(), axis=1) == 1]
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

