Python:每周拆分datetime日期

2024-06-08 07:12:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有印度国家证券交易所Banknifty指数的EOD OHLC数据集

目标:我想每周拆分OHLC数据

您可以使用以下代码获取相关数据:

from nsepy import get_history
from datetime import date

bankniftydata = get_history(symbol='BANKNIFTY',start=date(2016,5,30),end=date(2016,6,10),index=True)

print(bankniftydata)

我已将此数据下载为.csv文件,并使用以下代码转换为datetime格式:

df['Date'] = pd.to_datetime(df['Date'])

下面是输出

enter image description here

我还尝试了以下代码每周拆分上述数据集,但我无法将生成的列表拆分为每周数据集或可操作的DataFrame

weeks = [g for n, g in df.groupby(pd.Grouper(key='Date',freq='W'))]
print((weeks)) 

以下是上述代码的输出:

enter image description here


Tags: 数据代码fromimportdfgetdatetimedate
1条回答
网友
1楼 · 发布于 2024-06-08 07:12:57

虽然我认为输出2就是答案,但下面的代码以DataFrames的形式给出了结果:

import numpy as np
import pandas as pd
from nsepy import get_history
from datetime import date

bankniftydata = get_history(symbol='BANKNIFTY',start=date(2016,5,30),end=date(2016,6,10),index=True)

df = bankniftydata.reset_index()

df['Date'] = pd.to_datetime(df['Date'])
display(df.head(2))
weeks = set(list(df["Date"].dt.week))

for i in weeks:
    df_of_that_week = df[df["Date"].dt.week == i]
    display(df_of_that_week)

结果如下:

    Date    Open    High    Low     Close   Volume  Turnover
0   2016-05-30  17580.85    17666.05    17484.8     17520.65    96747582    2.371690e+10
1   2016-05-31  17615.10    17648.25    17462.2     17620.90    115964022   3.491600e+10

    Date    Open    High    Low     Close   Volume  Turnover
0   2016-05-30  17580.85    17666.05    17484.80    17520.65    96747582    2.371690e+10
1   2016-05-31  17615.10    17648.25    17462.20    17620.90    115964022   3.491600e+10
2   2016-06-01  17670.85    17670.85    17392.85    17423.45    99164561    2.547940e+10
3   2016-06-02  17405.15    17596.40    17350.45    17567.80    78335336    2.242660e+10
4   2016-06-03  17657.20    17762.05    17649.05    17680.80    89366456    2.670520e+10

    Date    Open    High    Low     Close   Volume  Turnover
5   2016-06-06  17710.45    17754.15    17636.90    17671.40    81251372    2.190330e+10
6   2016-06-07  17796.55    18000.95    17713.35    17948.15    167578972   4.195310e+10
7   2016-06-08  17976.25    17995.80    17855.20    17946.80    123360967   2.819240e+10
8   2016-06-09  17955.80    17986.15    17801.55    17887.70    107528433   2.437910e+10
9   2016-06-10  17830.20    18051.50    17815.25    17828.60    94174779    2.392430e+10

此外,根据输出2的代码,可以按如下方式访问和修改DataFrames

weeks = [g for n, g in df.groupby(pd.Grouper(key='Date',freq='W'))]
for df_of_the_week in weeks:
    display(df_of_the_week)
    # Perform any operation on df_of_the_week here

相关问题 更多 >

    热门问题