Home > Enterprise >  Week number not matching with datetime index strftime week number in pandas
Week number not matching with datetime index strftime week number in pandas

Time:06-06

I have the following code which converts index to week number as well as another column is added with week number:

import yfinance as yf
import pandas as pd

df = yf.download('f', interval = '1wk')
df['week'] = df.index.isocalendar().week
df.index = pd.to_datetime(df.index)
df.index = df.index.strftime('%U')
df = df[df['week'] ==12]
print(df)   
           Open       High        Low      Close  Adj Close       Volume  week
Date                                                                          
11     2.092394   2.092394   1.950468   2.011294   0.262594    7956172.0    12
11     1.682837   1.690947   1.646341   1.654451   0.229500    8985757.0    12
11     1.192178   1.248949   1.184068   1.224618   0.184168   10983278.0    12
11     1.820708   1.849093   1.784212   1.800432   0.286859   16121960.0    12
12     1.901808   1.909918   1.804487   1.808542   0.303502   11485741.0    12
12     1.809556   1.829831   1.794350   1.809556   0.326586   11250230.0    12
11     1.758868   1.784212   1.758868   1.769006   0.346003   13469697.0    12
11     1.196233   1.211440   1.135408   1.145545   0.248064   21795165.0    12
11     0.907313   1.054307   0.902244   1.013757   0.237924   33698903.0    12
12     0.846487   0.876900   0.821143   0.841418   0.206226   25282194.0    12
12     1.642286   1.692974   1.596667   1.616942   0.396302   32589171.0    12
12     2.356985   2.364588   2.197318   2.258144   0.563657   50150085.0    12
11     2.623096   2.661112   2.569874   2.592684   0.680899   70440945.0    12
11     4.409843   4.964875   4.394637   4.820415   1.337498   77535017.0    12
11     7.276241   7.470122   7.093765   7.424503   2.144691   40895183.0    12
12     8.097384   8.120194   7.664003   7.664003   2.311799   25503044.0    12
12     9.055384   9.101003   8.781670   8.850099   2.806630   22920790.0    12
11     8.827289   8.918527   8.667622   8.804480   2.974335   23601426.0    12
11     6.295431   6.432288   5.862050   5.976097   2.199914   26059828.0    12
11     6.637574   7.413098   6.637574   7.344669   2.845779   78490758.0    12
12     9.420337   9.762480   9.420337   9.557194   3.842265   39688451.0    12
12    11.245099  11.701290  10.948576  10.994195   4.545142   56170594.0    12
12     9.351908   9.397527   9.032575   9.306289   3.979715   57608865.0    12
11    11.997814  12.454005  11.997814  12.271528   5.494052   41265643.0    12
11    11.587242  11.860957  11.496004  11.587242   5.431107   25078605.0    12
11    21.897152  23.288532  21.805914  23.220104  11.327546   32670825.0    12
12    32.182701  32.972672  30.362335  31.289692  15.777828   22828360.0    12
12    24.214306  25.244701  23.493029  24.523424  12.810479   44824758.0    12
11    28.400000  30.090000  27.020000  27.900000  15.203670   28355400.0    12
11    17.000000  17.270000  16.299999  16.670000   9.438626   36153400.0    12
11     6.700000   8.030000   6.600000   8.020000   4.709421   89985100.0    12
11    13.270000  13.440000  13.000000  13.060000   7.929460   39367600.0    12
12    11.310000  11.630000  10.940000  11.290000   7.051045   58470600.0    12
12     7.850000   8.250000   7.810000   8.090000   5.279247   93573100.0    12
11     7.580000   8.230000   7.570000   7.890000   5.259418  201311700.0    12
11     5.020000   5.730000   4.950000   5.620000   3.746252  393914200.0    12
11     2.280000   2.780000   2.090000   2.750000   1.833130  298598800.0    12
12    12.980000  14.300000  12.810000  13.860000   9.238977  578653600.0    12
12    14.700000  15.200000  14.020000  15.010000  10.005558  342805300.0    12
12    12.520000  12.680000  12.180000  12.320000   8.244656  215053600.0    12
11    13.160000  13.420000  12.800000  13.260000   9.070373  158372200.0    12
11    15.180000  15.740000  15.160000  15.470000  10.870311  132509200.0    12
11    16.260000  16.540001  16.110001  16.480000  11.979823  152515700.0    12
12    13.640000  13.760000  12.780000  13.060000  10.109502  114791900.0    12
12    12.480000  12.490000  11.500000  11.620000   9.458299  332979200.0    12
11    11.150000  11.190000  10.510000  10.560000   9.152753  238518100.0    12
11     8.450000   8.870000   8.420000   8.540000   7.878255  237838700.0    12
11     5.040000   5.220000   4.100000   4.330000   4.257940  596481500.0    12
12    12.850000  12.930000  11.720000  12.300000  12.095303  312358300.0    12
12    16.870001  17.309999  16.330000  16.469999  16.361143  331864800.0    12

As you can see there are instances where week 11 is being shown in the index column using df.index.strftime('%U') when the week number is showing as 12 using df.index.isocalendar().week Why are there week number different in index column as compare to column week ?


Edit

With this:

df = yf.download('f', interval = '1wk')
print(len(df.index.year))
df['week'] = df.index.isocalendar().week

df.index = pd.to_datetime(df.index)
df['dates_with_strf'] = df.index.strftime('%U')
df = (df[df['week'] ==12]) 
print(df)   

I have dates

                 Open       High        Low  ...       Volume  week  dates_with_strf
Date                                         ...                                    
1973-03-19   2.092394   2.092394   1.950468  ...    7956172.0    12               11
1974-03-18   1.682837   1.690947   1.646341  ...    8985757.0    12               11
1975-03-17   1.192178   1.248949   1.184068  ...   10983278.0    12               11
1976-03-15   1.820708   1.849093   1.784212  ...   16121960.0    12               11
1977-03-21   1.901808   1.909918   1.804487  ...   11485741.0    12               12
1978-03-20   1.809556   1.829831   1.794350  ...   11250230.0    12               12
1979-03-19   1.758868   1.784212   1.758868  ...   13469697.0    12               11
1980-03-17   1.196233   1.211440   1.135408  ...   21795165.0    12               11
1981-03-16   0.907313   1.054307   0.902244  ...   33698903.0    12               11
1982-03-22   0.846487   0.876900   0.821143  ...   25282194.0    12               12
1983-03-21   1.642286   1.692974   1.596667  ...   32589171.0    12               12
1984-03-19   2.356985   2.364588   2.197318  ...   50150085.0    12               12
1985-03-18   2.623096   2.661112   2.569874  ...   70440945.0    12               11
1986-03-17   4.409843   4.964875   4.394637  ...   77535017.0    12               11
1987-03-16   7.276241   7.470122   7.093765  ...   40895183.0    12               11
1988-03-21   8.097384   8.120194   7.664003  ...   25503044.0    12               12
1989-03-20   9.055384   9.101003   8.781670  ...   22920790.0    12               12
1990-03-19   8.827289   8.918527   8.667622  ...   23601426.0    12               11
1991-03-18   6.295431   6.432288   5.862050  ...   26059828.0    12               11
1992-03-16   6.637574   7.413098   6.637574  ...   78490758.0    12               11
1993-03-22   9.420337   9.762480   9.420337  ...   39688451.0    12               12
1994-03-21  11.245099  11.701290  10.948576  ...   56170594.0    12               12
1995-03-20   9.351908   9.397527   9.032575  ...   57608865.0    12               12
1996-03-18  11.997814  12.454005  11.997814  ...   41265643.0    12               11
1997-03-17  11.587242  11.860957  11.496004  ...   25078605.0    12               11
1998-03-16  21.897152  23.288532  21.805914  ...   32670825.0    12               11
1999-03-22  32.182701  32.972672  30.362335  ...   22828360.0    12               12
2000-03-20  24.214306  25.244701  23.493029  ...   44824758.0    12               12
2001-03-19  28.400000  30.090000  27.020000  ...   28355400.0    12               11
2002-03-18  17.000000  17.270000  16.299999  ...   36153400.0    12               11
2003-03-17   6.700000   8.030000   6.600000  ...   89985100.0    12               11
2004-03-15  13.270000  13.440000  13.000000  ...   39367600.0    12               11
2005-03-21  11.310000  11.630000  10.940000  ...   58470600.0    12               12
2006-03-20   7.850000   8.250000   7.810000  ...   93573100.0    12               12
2007-03-19   7.580000   8.230000   7.570000  ...  201311700.0    12               11
2008-03-17   5.020000   5.730000   4.950000  ...  393914200.0    12               11
2009-03-16   2.280000   2.780000   2.090000  ...  298598800.0    12               11
2010-03-22  12.980000  14.300000  12.810000  ...  578653600.0    12               12
2011-03-21  14.700000  15.200000  14.020000  ...  342805300.0    12               12
2012-03-19  12.520000  12.680000  12.180000  ...  215053600.0    12               12
2013-03-18  13.160000  13.420000  12.800000  ...  158372200.0    12               11
2014-03-17  15.180000  15.740000  15.160000  ...  132509200.0    12               11
2015-03-16  16.260000  16.540001  16.110001  ...  152515700.0    12               11
2016-03-21  13.640000  13.760000  12.780000  ...  114791900.0    12               12
2017-03-20  12.480000  12.490000  11.500000  ...  332979200.0    12               12
2018-03-19  11.150000  11.190000  10.510000  ...  238518100.0    12               11
2019-03-18   8.450000   8.870000   8.420000  ...  237838700.0    12               11
2020-03-16   5.040000   5.220000   4.100000  ...  596481500.0    12               11
2021-03-22  12.850000  12.930000  11.720000  ...  312358300.0    12               12
2022-03-21  16.870001  17.309999  16.330000  ...  331864800.0    12               12

CodePudding user response:

data

import pandas.util.testing
df= pd.util.testing.makeMixedDataFrame().set_index('D').rename_axis(None)

df['week_strf'] =df.index.strftime('%U')

df['week_iso'] = df.index.isocalendar().week

Check documentation

stftime, Sunday as the first day of the week

ISO weeks start on a Monday and end on a Sunday

             A    B     C  week_strf  week_iso
2009-01-01  0.0  0.0  foo1        00         1
2009-01-02  1.0  1.0  foo2        00         1
2009-01-05  2.0  0.0  foo3        01         2
2009-01-06  3.0  1.0  foo4        01         2
2009-01-07  4.0  0.0  foo5        01         2
  • Related