【问题标题】:Building a database of time series using a loop使用循环构建时间序列数据库
【发布时间】:2019-02-21 19:38:02
【问题描述】:

我在这里有很多关于合并数据库的内容,但我正在努力解决我的问题。

我希望创建一个比赛结果数据库。我从 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 吗?我想使用联接或合并,但它只会创建新列,而不是将新数据发送到数据库底部。

我希望我已经对自己进行了足够的解释,提前感谢您的帮助。

【问题讨论】:

    标签: python-3.x pandas dataframe time-series


    【解决方案1】:

    您可以将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]
    

    然后继续列表推导,使用 Pandas.concat 创建您的 DataFrame:

    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])
    

    【讨论】:

    • 嗨,伙计,非常感谢您的帮助,这基本上正是我所追求的,您的回答对我来说完全有意义。但是由于某种原因,我收到此错误:'FileNotFoundError:文件 b'dwbfpricesukwin{}.csv' 不存在'。这些文件与我的代码文件位于同一目录中。在我放入 {} 之前工作正常,我知道代码需要它来编辑文件名。再次提前感谢您的帮助
    • @topbantz 你能发布你正在使用的确切代码吗?看起来文件路径的格式不正确。另外,不确定它是否作为字节类型传递..?
    • import pandas as pd win_template = pd.read_csv('dwbfpricesukwin{}.csv') place_template = pd.read_csv('dwbfpricesukplace{}.csv') start_date = '16092018' end_date = '18092018'日期 = pd.date_range(start=start_date, end=end_date, freq='D') win_data = [win_template.format(x.strftime('%d%m%Y')) for x in dates] place_data = [place_template .format(x.strftime('%d%m%Y')) for x in dates] df_win = pd.concat([pd.read_csv(win) for win_data]) df_place = pd.concat([pd. read_csv(place) for place_data])
    • 如果我们在代码中使用 %d%m%Y,它如何知道将日期格式化为 18092018 而不是 180918?
    • Ahhhh 我明白了,所以我不必在 start/end_date 中输入正确的格式,因为我们稍后会正确格式化它,是的,这是有效的。非常感谢你的帮助伙伴,传奇。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2021-06-29
    • 2014-11-10
    • 2021-01-19
    • 1970-01-01
    • 2022-07-19
    相关资源
    最近更新 更多