Python中CSV日期(dd/mm/yyyy)转天数及DataFrame指定区间天数计算
1. 转换CSV中dd/mm/yyyy格式日期为当年天数
用pandas是最高效的处理方式,直接解析日期并提取当年序数:
import pandas as pd # 读取CSV时直接解析日期列,dayfirst=True适配dd/mm/yyyy格式 df = pd.read_csv("your_data.csv", parse_dates=["date_col"], dayfirst=True) # 生成当年天数列,自动处理闰年 df["day_of_year"] = df["date_col"].dt.dayofyear
如果不用pandas,用标准库datetime处理:
from datetime import datetime import csv with open("your_data.csv", "r") as f: reader = csv.DictReader(f) for row in reader: # 解析dd/mm/yyyy格式的日期字符串 date = datetime.strptime(row["date_col"], "%d/%m/%Y") # 获取当年天数,tm_yday自动处理闰年 day_num = date.timetuple().tm_yday print(f"{row['date_col']} → {day_num}")
2. 计算DataFrame中指定日期范围内的总天数(按当年序数累加)
以下函数会过滤1995-01-01至2019-12-31的日期,计算每个日期的当年序数并求和,自动处理闰年:
import pandas as pd def sum_day_of_year(df): # 确保"days"列转为datetime类型,适配dd/mm/yyyy格式 df["days"] = pd.to_datetime(df["days"], dayfirst=True) # 过滤目标日期范围 date_mask = (df["days"] >= "1995-01-01") & (df["days"] <= "2019-12-31") filtered = df.loc[date_mask] # 计算每个日期的当年天数并求和 return filtered["days"].dt.dayofyear.sum() # 测试示例 test_df = pd.DataFrame({"days": ["01/01/1995", "01/02/1995", "31/12/2019"]}) print(sum_day_of_year(test_df)) # 输出 1 + 32 + 365 = 398
如果你的需求是计算从1995-01-01到每个日期的累计天数之和(比如1995-01-01算第1天,1995-01-02算第2天),用这个版本:
def sum_cumulative_days(df): df["days"] = pd.to_datetime(df["days"], dayfirst=True) start_date = pd.to_datetime("1995-01-01") date_mask = (df["days"] >= start_date) & (df["days"] <= "2019-12-31") filtered = df.loc[date_mask] # 计算累计天数(+1对应示例中的起始日为第1天) filtered["cumulative"] = (filtered["days"] - start_date).dt.days + 1 return filtered["cumulative"].sum()
说明:
dt.dayofyear和tm_yday都会自动处理闰年,比如2020年2月29会被计算为当年第60天,无需手动编写闰年判断逻辑。
内容的提问来源于stack exchange,提问作者Dera
相关产品推荐
相关产品推荐

