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

如何通过for循环从CSV文件获取所有日期数据?运行返回空DataFrame

问题原因
  • 语法错误:筛选逻辑存在括号缺失,原代码df.loc[(df['created_at'] == time[i]] 中条件判断部分少了闭合右括号,代码本身就无法正常执行。
  • 时区不匹配:pd.date_range生成的时间序列带UTC时区标识(+00:00),属于时区感知时间;但你用pd.to_datetime转换created_at列时,仅解析年月日,输出的是不带时区的朴素时间,两者做等值判断永远无法命中,因此返回全空DataFrame。
  • 逻辑低效:逐日期for循环匹配是pandas场景下的低性能写法,易出边界问题,非必要不使用。
可运行修复代码

方案1:兼容原有遍历逻辑

统一两边的日期格式,补全语法错误即可正常输出每日匹配数据:

import pandas as pd

df = pd.read_csv('yogun_bakim_yatak.csv', encoding="utf-8")  
# 转换created_at为纯日期格式,去掉时分秒与时区信息
df['created_at'] = pd.to_datetime(df['created_at'], format='%Y-%m-%d').dt.date
# 生成日期序列时去掉时区参数,和列格式完全对齐
time = pd.date_range(start="2020-12-25", end="2021-12-25", freq="D").date

n = len(time)
for i in range(n):
    # 补全缺失的右括号
    filtered_df = df.loc[df['created_at'] == time[i]]
    # 可按需跳过无数据的日期
    if not filtered_df.empty:
        print(f"===== {time[i]} 对应数据 =====")
        print(filtered_df.to_string())

方案2:高效无循环实现(推荐)

如果只是需要按日拆分数据,不需要逐行循环,用groupby直接按日期分组即可,性能远高于for循环:

import pandas as pd

df = pd.read_csv('yogun_bakim_yatak.csv', encoding="utf-8")  
df['created_at'] = pd.to_datetime(df['created_at'], format='%Y-%m-%d').dt.date

# 直接生成每日数据字典,key为日期,value为对应日期的DataFrame
daily_data = {curr_date: sub_df for curr_date, sub_df in df.groupby('created_at')}

# 取指定日期数据直接按键索引即可,示例为取2021年1月1日的数据
# target_df = daily_data.get(pd.to_datetime("2021-01-01").date())

注意:如果原始CSV的created_at列带非0的时分秒信息,不要直接用等值匹配全天数据,要改用时间范围判断:df.loc[(df['created_at'] >= 当日零点) & (df['created_at'] < 次日零点)],避免漏掉时分秒不为0的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:54:31