Search code examples
pythonpython-holidays

Python: Looping over list of countries for holidays


I am fairly new to Python. I am leveraging Python's holiday package which has public holidays by country. In order to get a country's holiday, you can run something like:

sorted(holidays.US(years=np.arange(2014,2030,1)).items()

This will give the date and holiday. Now, I want the data against a bunch of countries. How do I loop over the list of countries instead of replacing the country name in the above code every single time? the countries under consideration here are:

[FRA, Norway, Finland, US, Germany, UnitedKingdom, Sweden]

I tried a for loop like this:

countrylistLoop = ['FRA', 'Norway', 'Finland', 'US', 'Germany', 'UnitedKingdom', 'Sweden']

for i in countrylistLoop:
     print(sorted(holidays.i(years=np.arange(2014,2030,1)).items()),columns=['Date','Holiday'])

This throws an AttributeError:

AttributeError: module 'holidays' has no attribute 'i'.

This makes sense but I am not sure how to proceed!

Ideally, I would like to loop over and store the results in a dataframe. Any help is highly appreciated! Thank you!


Solution

  • You could get the items the following way

    import holidays
    countrylistLoop = ['FRA', 'Norway', 'Finland', 'US', 'Germany', 'UnitedKingdom', 'Sweden']
    for country in countrylistLoop:
        hd = sorted(holidays.CountryHoliday(country, years=np.arange(2014,2030,1)).items())
    

    But it doesn't take the columns argument for sorted.

    or you can sort items based on the index

    hd = sorted(list(holidays.CountryHoliday(country, 
                years=np.arange(2014,2030,1)).items()), 
                key=lambda holiday: holiday[1])