Python : 按周拆分 datetime 日期
Python : Split datetime dates on a weekly basis
我有包含印度国家证券交易所 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'])
下面是输出
我也尝试过下面的代码来每周拆分上面的数据集,但我无法将生成的列表拆分为每周数据集或我可以操作的 DataFrame
:
weeks = [g for n, g in df.groupby(pd.Grouper(key='Date',freq='W'))]
print((weeks))
下面是上面代码的输出:
虽然我认为输出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
我有包含印度国家证券交易所 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'])
下面是输出
我也尝试过下面的代码来每周拆分上面的数据集,但我无法将生成的列表拆分为每周数据集或我可以操作的 DataFrame
:
weeks = [g for n, g in df.groupby(pd.Grouper(key='Date',freq='W'))]
print((weeks))
下面是上面代码的输出:
虽然我认为输出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