每日更新Pandas DataFrame:如何实现每日追加数据?
没问题!我帮你调整出一个能持久保存历史数据、每日仅追加新数据的方案,完全贴合你的需求:
实现持久化追加数据的Pandas DataFrame方案
核心思路
- 用本地文件(比如CSV)作为历史数据的持久化存储载体
- 每次运行脚本时遵循以下流程:
- 检查历史数据文件是否存在,存在则直接加载为DataFrame
- 获取当日的新数据(替换成你的真实接口请求逻辑)
- 将新数据追加到历史DataFrame中
- 把更新后的DataFrame重新保存回本地文件,覆盖旧文件
完整代码示例
import pandas as pd import requests from random import choice # 这里是模拟数据用的,你可以替换成真实接口逻辑 # 定义历史数据的存储路径,可根据你的需求修改 HISTORY_CSV_PATH = "lineup_history.csv" def get_daily_new_data(): """模拟获取当日新数据的函数,把这里换成你的真实接口请求""" # 示例模拟数据,实际场景中改成requests.get(...)解析响应的逻辑 sample_daily_data = [ {"date": "2024-05-20", "player": choice(["LeBron", "Curry", "Durant"]), "position": choice(["PG", "SF", "C"])}, {"date": "2024-05-20", "player": choice(["Harden", "Davis", "Booker"]), "position": choice(["SG", "PF", "SG"])} ] return pd.DataFrame(sample_daily_data) def main(): # 1. 加载历史数据(首次运行则创建空DataFrame) try: lineup_df = pd.read_csv(HISTORY_CSV_PATH) print(f"成功加载历史数据,当前已有 {len(lineup_df)} 条记录") except FileNotFoundError: # 首次运行时初始化空DataFrame,列名根据你的数据结构定义 lineup_df = pd.DataFrame(columns=["date", "player", "position"]) print("未找到历史数据,创建新的空DataFrame") # 2. 获取当日新数据 daily_new_df = get_daily_new_data() print(f"获取到当日新数据 {len(daily_new_df)} 条") # 3. 追加新数据到历史DataFrame lineup_df = pd.concat([lineup_df, daily_new_df], ignore_index=True) # 可选:如果担心接口返回重复数据,添加去重逻辑 # lineup_df = lineup_df.drop_duplicates(subset=["date", "player"], keep="last").reset_index(drop=True) # 4. 保存更新后的历史数据 lineup_df.to_csv(HISTORY_CSV_PATH, index=False) print(f"数据已保存,当前总记录数:{len(lineup_df)}") if __name__ == "__main__": main()
关键细节说明
- 持久化选择:示例用CSV是因为简单易读,如果你数据量较大,也可以换成Excel、SQLite或者数据库来存储
- 去重逻辑:如果你的接口可能返回重复数据,可以取消代码里的去重注释,基于唯一标识(比如日期+球员名)去重
- 接口替换:把
get_daily_new_data函数里的模拟代码,换成你的真实requests请求和数据解析逻辑即可
这样每次运行脚本,都会自动加载已有历史数据,只追加当日新内容,完全不用每次新建lineup_df~
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

