基于日期范围生成并追加DataFrame的技术实现求助
解决方案:生成并追加课程日期DataFrame
核心思路
无需手动转换嵌套列表,直接利用pandas的日期序列生成和DataFrame构造功能即可完成需求,分两步实现:生成初始DataFrame、追加新数据到已有DataFrame。
1. 生成初始DataFrame
实现一个函数,接收起始日期、结束日期(月-年格式)和课程名称,自动生成包含ID、Date(月份缩写-年份)、Course的DataFrame:
import pandas as pd def create_course_df(start_date_str, end_date_str, course_name): # 解析输入的月-年字符串为datetime对象(默认取当月第一天) start_date = pd.to_datetime(start_date_str, format="%m-%Y") end_date = pd.to_datetime(end_date_str, format="%m-%Y") # 生成月度日期序列(freq='MS'表示每月初) monthly_dates = pd.date_range(start=start_date, end=end_date, freq='MS') # 将日期格式化为"月份缩写-年份"(例如Mar-2023) formatted_dates = monthly_dates.strftime("%b-%Y") # 构造DataFrame:ID从1开始递增,Date为格式化后的日期,Course列统一为输入的课程名 df = pd.DataFrame({ 'ID': range(1, len(formatted_dates) + 1), 'Date': formatted_dates, 'Course': [course_name] * len(formatted_dates) }) return df
示例调用
# 生成2023年3月到6月的Python编程课程数据 initial_df = create_course_df("03-2023", "06-2023", "Python编程") print(initial_df)
输出结果:
ID Date Course 0 1 Mar-2023 Python编程 1 2 Apr-2023 Python编程 2 3 May-2023 Python编程 3 4 Jun-2023 Python编程
2. 追加新数据到已有DataFrame
实现追加逻辑,确保新数据的ID延续现有序列,并且合并到原DataFrame中:
def append_course_df(existing_df, start_date_str, end_date_str, course_name): # 生成新的临时DataFrame new_data_df = create_course_df(start_date_str, end_date_str, course_name) # 计算新数据的起始ID(延续现有最大ID) next_start_id = existing_df['ID'].max() + 1 new_data_df['ID'] = range(next_start_id, next_start_id + len(new_data_df)) # 合并现有DataFrame和新数据(ignore_index=True重置索引避免冲突) updated_df = pd.concat([existing_df, new_data_df], ignore_index=True) return updated_df
示例调用
# 追加2023年7月到9月的数据分析课程数据 updated_df = append_course_df(initial_df, "07-2023", "09-2023", "数据分析") print(updated_df)
输出结果:
ID Date Course 0 1 Mar-2023 Python编程 1 2 Apr-2023 Python编程 2 3 May-2023 Python编程 3 4 Jun-2023 Python编程 4 5 Jul-2023 数据分析 5 6 Aug-2023 数据分析 6 7 Sep-2023 数据分析
可选调整:中文月份格式
如果需要将Date列改为中文月份(例如3月-2023),可以修改日期格式化逻辑:
# 自定义月份映射字典 month_map = { '01': '1月', '02': '2月', '03': '3月', '04': '4月', '05': '5月', '06': '6月', '07': '7月', '08': '8月', '09': '9月', '10': '10月', '11': '11月', '12': '12月' } # 替换格式化逻辑 formatted_dates = [f"{month_map[date.strftime('%m')]}-{date.year}" for date in monthly_dates]
替换后生成的Date列会显示为3月-2023这类格式。
内容的提问来源于stack exchange,提问作者naruto1996
相关产品推荐
相关产品推荐

