编写python程序,将csv文件的数据按月初,月中,月末对应的数据相加
时间: 2023-03-21 12:00:49 浏览: 112
以下是一个示例程序,可以读取给定的CSV文件,将其数据按照月初、月中、月末分别求和,并输出结果。
```python
import csv
from datetime import datetime, timedelta
# 定义函数,用于计算指定日期所在月份的月初、月中、月末日期
def get_month_boundaries(date):
first_day = date.replace(day=1)
mid_day = first_day + timedelta(days=14)
last_day = first_day.replace(day=28) + timedelta(days=4)
if last_day.day == 29:
last_day -= timedelta(days=1)
last_day = last_day.replace(day=last_day.day)
return first_day, mid_day, last_day
# 定义变量,用于记录每个月份的数据
monthly_totals = {}
# 打开CSV文件并读取数据
with open('data.csv') as csv_file:
csv_reader = csv.reader(csv_file)
next(csv_reader) # 跳过首行(标题行)
for row in csv_reader:
date = datetime.strptime(row[0], '%Y-%m-%d') # 从数据行中读取日期
value = float(row[1]) # 从数据行中读取数值
month = date.month # 获取日期所在的月份
if month not in monthly_totals:
monthly_totals[month] = {'beginning': 0, 'middle': 0, 'end': 0} # 初始化该月份的数据
first_day, mid_day, last_day = get_month_boundaries(date) # 计算该日期所在月份的月初、月中、月末日期
if date == first_day:
monthly_totals[month]['beginning'] += value # 将数值加到该月份的月初数据中
elif date == mid_day:
monthly_totals[month]['middle'] += value # 将数值加到该月份的月中数据中
elif date == last_day:
monthly_totals[month]['end'] += value # 将数值加到该月份的月末数据中
# 输出结果
for month, totals in monthly_totals.items():
print(f'Month {month}: beginning={totals["beginning"]}, middle={totals["middle"]}, end={totals["end"]}')
```
请注意,在上述代码中,我们使用了一个名为`get_month_boundaries`的函数来计算每个日期所在月份的月初、月中、月末日期。该函数假设每个月都是30天,并使用以下规则:
- 月初:该月的第一天。
- 月中:该月的第15天(或者如果该月只有28天,则为第14天)。
- 月末:该月的倒数第5天(或者如果该月只有28天,则为倒数第4天)。
这些规则可以根据需要进行修改。