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

如何修复Pandas中DataFrame年份列非标准行删除失效问题?

解决DataFrame删除含非年份格式行的问题

你的代码有两个核心问题:

  1. 正则表达式里的.是通配符,会匹配任意字符,所以contains(".")实际会匹配所有字符串,取反后逻辑完全错误,必须转义成\.才能匹配真实的小数点。
  2. 布尔运算逻辑搞反了:(~A)|(~B)等价于只要不同时包含小数点和横杠的行都保留,这和你要删除含小数点或横杠的需求完全相反,应该用~(A|B)或者(~A)&(~B)。

下面是几种可行的修正方案:

方案一:修正正则与逻辑运算

df['level_1'] = df['level_1'].astype(str)

# 筛选出既不含小数点也不含横杠的行
filtered_df = df.loc[
    ~(df['level_1'].str.contains(r"\.") | df['level_1'].str.contains("-")),
    :
]

方案二:用单个正则简化匹配

把小数点和横杠合并到一个正则表达式里,代码更简洁:

df['level_1'] = df['level_1'].astype(str)

# 匹配包含.或-的字符串,取反后保留目标行
filtered_df = df.loc[~df['level_1'].str.contains(r"[\.-]"), :]

方案三:精准匹配四位数字年份

如果你的年份是标准四位数字(比如2023、1998),直接匹配四位数字更精准,能排除其他非年份的纯数字(比如123、20234):

df['level_1'] = df['level_1'].astype(str)

# 只保留完全是四位数字的行
filtered_df = df.loc[df['level_1'].str.fullmatch(r"\d{4}"), :]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:10:29