'AttributeError: 'Series' object has no attribute 'Year'

I'm using a dataframe and convert the time column to years and months like this:

consumer_confidence = pd.read_csv('consumer_confidence.csv')
business_confidence = pd.read_csv('business_confidence.csv')

consumer_confidence['Year'] = pd.to_datetime(consumer_confidence['TIME']).dt.year
consumer_confidence['Month'] = pd.to_datetime(consumer_confidence['TIME']).dt.month

business_confidence['Year'] = pd.to_datetime(business_confidence['TIME']).dt.year
business_confidence['Month'] = pd.to_datetime(business_confidence['TIME']).dt.month

business_confidence = business_confidence.groupby('Year')['Value'].sum()
consumer_confidence = consumer_confidence.groupby('Year')['Value'].sum()

Attempting the .groupby() statements result in this error:

AttributeError: 'Series' object has no attribute 'Year'

I am unsure how to resolve this as 'Year' should now be a column in the dataframe. Could someone explain my error here?



Solution 1:[1]

Your code (with some sample inputs as shown below) works fine for me:

import pandas as pd
'''
consumer_confidence = pd.read_csv('consumer_confidence.csv')
business_confidence = pd.read_csv('business_confidence.csv')
'''
consumer_confidence = pd.DataFrame({'TIME':['2021-01-01', '2021-02-01', '2022-04-11', '2022-04-12'], 'Value':[1,2,3,4]})
business_confidence = pd.DataFrame({'TIME':['2020-01-01', '2021-02-01', '2022-04-11', '2022-04-12'], 'Value':[5,6,7,8]})

print(consumer_confidence)
print(business_confidence)

consumer_confidence['Year'] = pd.to_datetime(consumer_confidence['TIME']).dt.year
consumer_confidence['Month'] = pd.to_datetime(consumer_confidence['TIME']).dt.month

business_confidence['Year'] = pd.to_datetime(business_confidence['TIME']).dt.year
business_confidence['Month'] = pd.to_datetime(business_confidence['TIME']).dt.month

print(consumer_confidence)
print(business_confidence)

business_confidence = business_confidence.groupby('Year')['Value'].sum()
consumer_confidence = consumer_confidence.groupby('Year')['Value'].sum()

print(consumer_confidence)
print(business_confidence)

Output:

         TIME  Value
0  2021-01-01      1
1  2021-02-01      2
2  2022-04-11      3
3  2022-04-12      4
         TIME  Value
0  2020-01-01      5
1  2021-02-01      6
2  2022-04-11      7
3  2022-04-12      8
         TIME  Value  Year  Month
0  2021-01-01      1  2021      1
1  2021-02-01      2  2021      2
2  2022-04-11      3  2022      4
3  2022-04-12      4  2022      4
         TIME  Value  Year  Month
0  2020-01-01      5  2020      1
1  2021-02-01      6  2021      2
2  2022-04-11      7  2022      4
3  2022-04-12      8  2022      4
Year
2021    3
2022    7
Name: Value, dtype: int64
Year
2020     5
2021     6
2022    15
Name: Value, dtype: int64

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 constantstranger