使用Pandas按日期筛选DataFrame失败求助:CSV日期列处理问题
解决Pandas中日期筛选失效的问题
嘿,我完全懂你遇到的麻烦!作为Pandas新手,这种情况太常见了——你用query或loc筛选日期没成功,大概率是因为你的Effective Date列还只是字符串(object)类型,而不是Pandas能识别的datetime格式。Pandas没法直接对字符串做日期比较,所以才会卡壳。
下面一步步帮你解决:
第一步:先确认日期列的类型
先跑一行代码看看列的类型:
print(df.dtypes)
如果Effective Date显示的是object,那就是字符串没错了,这就是问题根源。
第二步:把字符串日期转换成datetime类型
你的日期格式是DD-MMM-YYYY(比如31-DEC-2007),所以要指定格式化规则让Pandas正确解析:
方法1:读取CSV时直接解析
最推荐的方式是读文件的时候就处理好,避免后续麻烦:
import pandas as pd df = pd.read_csv( '你的文件路径.csv', parse_dates=['Effective Date'], # 指定要解析的列 format='%d-%b-%Y' # 匹配日期格式:日-月缩写-年 )
方法2:读取后再转换
如果已经读取了数据,也可以单独转换列:
df['Effective Date'] = pd.to_datetime(df['Effective Date'], format='%d-%b-%Y')
小提示:如果CSV里有少数格式错误的日期,可以加
errors='coerce'把无效日期转成NaT(缺失日期),方便后续排查:df['Effective Date'] = pd.to_datetime(df['Effective Date'], format='%d-%b-%Y', errors='coerce')
第三步:现在可以正常筛选日期了
转换完成后,不管用loc还是query都能顺利工作:
用loc筛选
# 筛选特定日期(比如2007年12月31日) filtered_df = df.loc[df['Effective Date'] == pd.to_datetime('2007-12-31')] # 筛选时间段(比如2007年及以后的数据) filtered_df = df.loc[df['Effective Date'] >= '2007-01-01']
用query筛选
注意query里列名有空格的话,要用反引号包裹:
# 筛选特定日期 filtered_df = df.query("`Effective Date` == '2007-12-31'") # 筛选时间段 filtered_df = df.query("`Effective Date` >= '2007-01-01'")
核心就是先把字符串转成datetime类型,之后的日期操作就和你之前处理其他列一样顺手啦!
内容的提问来源于stack exchange,提问作者Matej Polak
相关产品推荐
相关产品推荐

