AttributeError: ‘ DataFrame’对象没有属性‘ ix’

当我尝试使用。Ix 属性来抽出一个列,例如 df.ix[:, 'col_header']

AttributeError: 'DataFrame' object has no attribute 'ix'

这个脚本在今天早上起作用了,但是今天下午我在一个新的 Linux 环境中安装了一个新的 Panda。以前有人见过这个错误吗?我在这里和其他地方都找过了,但是没有找到。

140126 次浏览

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)

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!

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]]

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.

I used .loc() instead of .ix() and it worked.

Try following steps: 1) installing new version of Pandas 2) use .loc instead of .ix

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:

enter image description here

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.

  1. Guys try to update current pandas
  2. replace .ix with .iloc after replacing its works well for me For details refers documentations

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[]

it works for me

Use df.loc[] instade of ix[]

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.