Pandas过滤Date_Start列日期后返回NaN/NaT问题求助
解决Pandas 0.22 + Python2.7.13日期过滤后出现NaN/NaT的问题
听起来你碰到了挺闹心的状况——明明过滤逻辑写对了,但返回的DataFrame里却全是NaN/NaT,查了一圈示例也没找到类似情况。结合你用的老版本Pandas和Python环境,我给你梳理几个大概率的原因和对应的解决办法:
1. 先确认Date_Start列的类型是否为datetime
Pandas 0.22对日期类型的兼容性比较严格,如果Date_Start是字符串(object类型),直接用日期条件过滤很可能会出现匹配失效,最终返回空值行。先检查列类型:
print(df['Date_Start'].dtype)
如果输出是object,先把它转成datetime类型(记得指定和你数据匹配的格式,避免解析错误):
# 替换成你的实际日期格式,比如%Y/%m/%d或者%m-%d-%Y df['Date_Start'] = pd.to_datetime(df['Date_Start'], format='%Y-%m-%d')
转换完成后再执行过滤逻辑,应该能解决类型不匹配导致的空结果问题。
2. 检查过滤条件是否真的匹配到了数据
有时候看起来逻辑没问题,但过滤条件太严格导致没有匹配到任何行,这时候返回的DataFrame就会只有列名、全是NaN/NaT的状态。你可以先单独验证过滤后的行数:
# 替换成你的实际过滤条件 filtered_df = df[df['Date_Start'] >= '2023-01-01'] print(f"匹配到的行数:{len(filtered_df)}")
如果输出是0,那得调整你的过滤条件;如果有行数,再检查列选择是否正确——确保Full_Path和Date_Start的拼写完全一致(Pandas对大小写敏感):
# 索引会自动保留,不需要额外指定列 result_df = filtered_df[['Full_Path', 'Date_Start']] print(result_df.head())
3. 注意Python2.7的字符串编码坑
Python2.7默认用ASCII编码,如果你的Date_Start列包含非ASCII字符(比如特殊日期分隔符),可能会导致日期解析失败。可以先把字符串转成Unicode再处理:
df['Date_Start'] = df['Date_Start'].apply(lambda x: unicode(x, 'utf-8')) df['Date_Start'] = pd.to_datetime(df['Date_Start'])
4. 规避Pandas 0.22的版本特性问题
Pandas 0.22是2018年的老版本,在Python2.7下存在一些datetime处理的小bug。比如用pd.Timestamp作为过滤条件时可能出现兼容性问题,换成字符串形式的日期会更稳妥:
filter_date = '2023-01-01' # 用loc方法明确选择列,避免隐式索引问题 result_df = df.loc[df['Date_Start'] >= filter_date, ['Full_Path', 'Date_Start']]
内容的提问来源于stack exchange,提问作者Eric T
相关产品推荐
相关产品推荐

