AttributeError: 'DataFrame' object has no attribute 'ix'
PythonPandasDataframePython Problem Overview
I am getting this error when I try to use the .ix attribute of a pandas data frame to pull out a column, e.g. df.ix[:, 'col_header']
.
AttributeError: 'DataFrame' object has no attribute 'ix'
The script worked this morning, but this afternoon I ran it in a new Linux environment with a fresh install of Pandas. Has anybody else seen this error before? I've searched here and elsewhere but can't find it.
Python Solutions
Solution 1 - Python
try df.iloc[:, integer]
.ix
is deprecated
By the way, df.loc[:,'col_header']
is for str or Boolean indexing
Solution 2 - Python
Change .ix to .loc and it should work correctly.
Solution 3 - Python
A fresh install today (Jan 30, 2020) would install pd.__version__ == '1.0.0'
. With that comes a removal of many deprecated features.
> Removed Series.ix and DataFrame.ix (GH26438)
Solution 4 - Python
Try following steps:
- installing new version of Pandas
- use .loc instead of .ix
Solution 5 - Python
had same issue with pandas 1.0.0, this worked for me
Open Anaconda Prompt (cmd) as Administrator, then
conda install pandas==0.25.1
Your newer pandas version will be overwritten by older one!
Solution 6 - Python
it works for me
Use df.loc[] instade of ix[]
Solution 7 - Python
I used .loc() instead of .ix() and it worked.
Solution 8 - Python
replace .ix with .iloc after replacing its works well for me also
predictions_ARIMA_log = pd.Series(ts_log.iloc[0], index=ts_log.index)
Solution 9 - Python
as ix is removed
use iloc or loc inplace of ix.
use .loc if you have string or userdefined indexing.
Solution 10 - Python
one column:
df[['sepal width']]
two columns:
df[['sepal width','petal width']]
special columns(select column include 'length'):
df[[c for c in df.columns if 'length' in c]]
Solution 11 - Python
I am reading the book 'Python for data analysis' by Wes McKinney and I met the same problem of Dataframe.ix[] while retrieving the rows with index. I replace ix by iloc and it works perfectly.
Solution 12 - Python
I'm using .ix as I have mixed indexing, labels and integers. .loc() does not solve the issue as well as .iloc; both are ending in errors. I was intentionally using .ix because it was the fast lane when the index is a mix of integers and labels.
As example a df like:
My way out is to back-up columns and index, replace with integers, use .iat and then restore the df as it was at the beginning. I have something like:
# Save the df and replace indec and columns with integers
lista_colonne = list(df.columns)
df.columns = range(0,len(lista_colonne))
nome_indice = df.index.name
lista_indice = list(df.index)
df['Indice'] = range(0,len(lista_indice))
df.index = df['Indice']
del df['Indice']
... indexing here with .iat in place of .ix
# Now back as it was
df.columns = lista_colonne
df['Indice'] = lista_indice
df.index = df['Indice']
del df['Indice']
df.index.name = nome_indice
Bye, Fabio.
Solution 13 - Python
I had to do this:
returns.ix['2015-01-01':'2015-12-31'].std()
After much ado I made it happen using this:
returns.xs(key='2015',axis=0).std()
I believe at least for this case we can use cross section and filter using 2015 as key.
Solution 14 - Python
Yes, that's right. Replace df.ix[]
with df.iloc[]
or df.loc[]
Solution 15 - Python
- Guys try to update current pandas
- replace .ix with .iloc after replacing its works well for me For details refers documentations