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.
115 Answers
try df.iloc[:, integer]
.ix is deprecated
By the way, df.loc[:,'col_header'] is for str or Boolean indexing
Change .ix to .loc and it should work correctly.
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)
Try following steps: 1) installing new version of Pandas 2) use .loc instead of .ix
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!
it works for me
Use df.loc[] instade of ix[]
I used .loc() instead of .ix() and it worked.
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)
as ix is removed
use iloc or loc inplace of ix.
use .loc if you have string or userdefined indexing.
3one 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]] 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.
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.
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.
Yes, that's right. Replace df.ix[] with df.iloc[] or df.loc[]
- Guys try to update current pandas
- replace .ix with .iloc after replacing its works well for me For details refers documentations
