python-3.x - 使用循环构建时间序列数据库
问题描述
我在这里有很多关于合并数据库的内容,但我正在努力解决我的问题。
我正在寻找创建一个赛车结果数据库。我从 csv 文件中获取所有数据,win 市场和 place 市场都有 csv 文件,每天都有 1 个。所以每个日期都有 2 个 csv 文件,一个胜利和一个地方。
我试图通过将过去 2 天的数据连接在一起来开始创建这个数据库。到目前为止效果很好。
import pandas as pd
win_1 = pd.read_csv('dwbfpricesukwin17092018.csv')
win_2 = pd.read_csv('dwbfpricesukwin16092018.csv')
place_1 = pd.read_csv('dwbfpricesukplace17092018.csv')
place_2 = pd.read_csv('dwbfpricesukplace16092018.csv')
win_data = win_1.append(win_2)
place_data = place_1.append(place_2)
place_data.rename(columns={'WIN_LOSE': 'WIN_LOSE_PLC', 'BSP': 'BSP_PLC'}, inplace=True)
total_data = win_data.merge(place_data[['WIN_LOSE_PLC', 'BSP_PLC', 'SELECTION_NAME']], on='SELECTION_NAME', how='outer')
total_data[['EVENT_DT', 'SELECTION_NAME', 'WIN_LOSE', 'BSP', 'WIN_LOSE_PLC', 'BSP_PLC']].to_csv('data.csv')
但是我想为全年创建一个数据库。
我正在考虑创建两个变量,开始日期和结束日期并循环通过它们,让循环更改 csv 文件中的日期。但我有点不知道从哪里开始。
start_date = '01012018'
end_date = '17092018'
我怎样才能让循环知道这两个数字是日期,并一次通过它们 1 天?
我也可以在这里使用 .append 吗?我想使用连接或合并,但它只会创建新列,而不是将新数据发送到数据库底部。
我希望我已经对自己进行了足够的解释,在此先感谢您的帮助。
解决方案
您可以使用Pandas.date_range
列表理解。
像这样的东西:
win_template = 'dwbfpricesukwin{}.csv'
place_template = 'dwbfpricesukwin{}.csv'
start_date = '2018-01-01'
end_date = '2018-09-17'
dates = pd.date_range(start=start_date, end=end_date, freq='D')
win_files = [win_template.format(x.strftime('%d%m%Y')) for x in dates]
place_files = [place_template.format(x.strftime('%d%m%Y')) for x in dates]
然后继续列表推导,使用以下方法创建您的 DataFrame Pandas.concat
:
df_win = pd.concat([pd.read_csv(win) for win in win_files])
df_place = pd.concat([pd.read_csv(place) for place in place_files])
推荐阅读
- angular - 创建新模型时未声明 Typescript 获取
- java - 你可以使用 Springs JdbcTemplate 来流式传输数据吗
- python - Django Form 不从 ajax POST 请求加载 MultipleChoiceField 数据
- jax-rs - 有没有办法在 @Path 注释中指定查询参数?
- c# - 为什么隐式类型的本地人总是可以为空的?
- c++ - cmake 世界中的 Qt pri 文件
- linux - HUB USB 断开连接,检测并重新加载,无需重启
- javascript - jQuery:基于具有或条件的多个事件执行任务
- python - 发送 AT+CUSD 命令需要等待 GSM 网络响应
- laravel - 如何在 laravel Blade 中以单一形式使用多个 post 方法?