Pandas 1.3.4环境下Date列按部分字符串筛选当日数据问题
问题修复方案
核心错误原因
- 你代码中
df['Date'].str.contains()返回的是布尔值序列,仅记录每行是否匹配筛选条件,而非筛选后的完整数据,直接存储该序列只会得到一列True/False结果 - 直接用字符串匹配日期可靠性低,容易出现误匹配,且依赖系统平台的日期格式化语法(
%#d仅适配Windows系统,Linux/macOS下要用%-d),兼容性差
修复后可运行代码
from datetime import date import pandas as pd # 读取CSV文件 df = pd.read_csv(r'file.csv') # 转换Date列为datetime类型,自动适配单数字日期不补零、带AM/PM的格式 # 若存在异常格式日期,可添加参数errors='coerce'将无效日期转为空值自动排除 df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y %I:%M:%S %p') # 提取手机号后10位,和Excel RIGHT(Phone number,10)效果完全一致 df['New Phone'] = df['Phone number'].str[-10:] # 筛选当日所有数据,自动忽略具体时间 today = date.today() df_today = df[df['Date'].dt.date == today] # 保留指定列后导出 df_today = df_today[['New Phone', 'Phone number', 'Date']] df_today.to_csv(r'file.csv', index=False)
额外说明
如果你的场景必须用字符串匹配实现,可以调整筛选逻辑为:
# 仅Windows系统下可用该写法 d1 = date.today().strftime("%m/%#d/%Y") df_today = df[df['Date'].str.startswith(d1, na=False)]
用startswith替代contains可以避免日期字符串其他位置出现相同内容导致的误匹配。
内容的提问来源于stack exchange,提问作者FinestRyeBread
相关产品推荐
相关产品推荐

