You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas仅在energy>0且Date含.22/.23时删除DataFrame行

搞定DataFrame行删除的正确姿势

先明确你的核心要求:只删掉同时满足两个条件的行——energy值大于0,而且Date里包含.22或.23;所有energy=0的行,不管Date是什么,都必须保留。

为啥之前的代码会误删?

估计你之前写的代码把逻辑搞混了,比如错用了|(或)而非&(且),导致把energy>0或者Date符合条件的行全删了,连energy=0但Date带.22/.23的行也被误删。

正确代码两种写法

写法一:直接定义要保留的行

我们要留的行,要么是energy≤0,要么是Date里不含.22/.23,把这两个条件用|(或)连接即可:

# 先把Date转成字符串类型(如果原本不是的话)
df['Date'] = df['Date'].astype(str)
# 构建保留规则
keep_rows = (df['energy'] <= 0) | (~df['Date'].str.contains('\.22|\.23'))
# 筛选出要保留的行
df = df[keep_rows]

写法二:先定位要删除的行再排除

先精准找到要删除的目标行(energy>0 且 Date含.22/.23),再取反保留其他行:

df['Date'] = df['Date'].astype(str)
# 定位要删除的行
drop_rows = (df['energy'] > 0) & (df['Date'].str.contains('\.22|\.23'))
# 排除这些行
df = df[~drop_rows]

关键注意事项

  • 使用str.contains时,.是正则表达式的特殊字符,必须用\转义成\.,否则会匹配任意字符(比如x22也会被误判为符合条件)
  • 如果你的Date列不是字符串类型,一定要先转换,否则str.contains会报错

示例验证

假设原始数据:

Dateenergy
2022.2210
2023.230
2021.215
2022.220

运行上述代码后,只会删除第一行,其余三行全部保留,完全符合你的期望结果。

内容的提问来源于stack exchange,提问作者Lynn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:24:20