susanli2016 / Machine-Learning-with-Python

Python code for common Machine Learning Algorithms
4.31k stars 4.82k forks source link

`AttributeError: 'DataFrame' object has no attribute 'ix'` in `Time Series Forecastings` #43

Open Lancashire3000 opened 2 years ago

Lancashire3000 commented 2 years ago

Hi, I tried to run Time Series Forecastings example. From

first_date = store.ix[np.min(list(np.where(store['office_sales'] > store['furniture_sales'])[0])), 'Order Date']

print("Office supplies first time produced higher sales than furniture is {}.".format(first_date.date()))

I got AttributeError: 'DataFrame' object has no attribute 'ix' If I replace ix to iloc, based on https://stackoverflow.com/questions/59991397/attributeerror-dataframe-object-has-no-attribute-ix then I got ValueError: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types

How to fix it? Thanks

aniketDash7 commented 1 year ago

The .ix indexer has been deprecated in Pandas, which is why you're getting an AttributeError. Instead, you should use .loc or .iloc for label-based or integer-location based indexing, respectively.

In the context of your code, you're trying to find the first date where office sales were higher than furniture sales. Here's how you can fix it using .loc:

first_date = store.loc[store['office_sales'] > store['furniture_sales'], 'Order Date'].min()

print("Office supplies first time produced higher sales than furniture is {}.".format(first_date.date()))