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

如何用Python读取CSV文件并对比昨日与今日的数据?

问题描述

现有CSV文件内容如下:

date,students
2022-11-16,22
2022-11-17,29

需求是读取该CSV,提取昨日和今日对应的学生数,校验两者是否存在5%的差异阈值,但在提取对应行的学生数时遇到困难。

尝试的代码如下:

import pandas as pd
from datetime import date
from datetime import timedelta

today = date.today()
yesterday = date.today() - timedelta(1)

print("today is ", today, " and yesterday was ", yesterday)

df = pd.read_csv('test.csv')
col1 = df.timestamp
col2 = df.hostcount

for row in col1:
    if row == str(yesterday):
        print(row)
解决思路与修正代码

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

  • CSV的列名是date和students,但代码错误使用了timestamp和hostcount,这是找不到数据的直接原因
  • 没必要用循环遍历,Pandas支持直接通过条件筛选定位目标行,效率更高

修正后的完整代码:

import pandas as pd
from datetime import date, timedelta

today = date.today()
yesterday = today - timedelta(1)

# 读取CSV并转换日期列,避免字符串匹配的格式问题
df = pd.read_csv('test.csv')
df['date'] = pd.to_datetime(df['date']).dt.date

# 获取昨日和今日的学生数
yesterday_students = df[df['date'] == yesterday]['students'].values[0]
today_students = df[df['date'] == today]['students'].values[0]

# 计算差异率(以昨日数据为基准)
diff_rate = abs(today_students - yesterday_students) / yesterday_students * 100

print(f"昨日学生数: {yesterday_students}, 今日学生数: {today_students}")
print(f"差异率: {diff_rate:.2f}%")

# 校验5%阈值
if diff_rate > 5:
    print("差异超过5%阈值!")
else:
    print("差异在5%阈值范围内。")
额外优化建议

如果CSV中存在某一天数据缺失的情况,直接用values[0]会报错,可以添加判断逻辑:

# 检查昨日数据是否存在
if not df[df['date'] == yesterday].empty:
    yesterday_students = df[df['date'] == yesterday]['students'].values[0]
else:
    print("昨日数据缺失!")

# 检查今日数据是否存在
if not df[df['date'] == today].empty:
    today_students = df[df['date'] == today]['students'].values[0]
else:
    print("今日数据缺失!")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:05:22