Richard Magowan
Richard Magowan

Reputation: 3

Python pandas DF question : trying to drop a column but nothing happens (df.drop) - code also runs without any errors

I am trying to delete a column called Rank but nothing happens. The remaining code all executes without any issue but the column itself remains in the output file. I've highlighted the part of the code that is not working.

def read_csv():

    file = "\mona" + yday+".csv"
    #df=[]
    df = pd.read_csv(save_path+file,skiprows=3,encoding = "ISO-8859-1",error_bad_lines=False)
    return df



# replace . with / in column EPIC
def tickerchange():
    df=read_csv()
    df['EPIC'] = df['EPIC'].str.replace('.','/')
    return df

def consolidate_AB_listings():
    df=tickerchange()
    Aline = df.loc[(df['EPIC'] =='RDSA'),'Mkt Cap (àm)']
    Bline = df.loc[(df['EPIC'] =='RDSB'),'Mkt Cap (àm)']
    df.loc[(df['EPIC'] =='RDSA'),'Mkt Cap (àm)']= float(Aline) + float(Bline)
    df = df.loc[(df.Ind != 'I/E')]
    df = df.loc[(df.Ind != 'FL')]
    df = df.loc[(df.Ind != 'M')]
    df = df.loc[(df.EPIC != 'RDSB')]
    return df  

def ranking_mktcap():
    df = consolidate_AB_listings()
    df['Rank']= df['Mkt Cap (àm)'].rank(ascending=False)
    df = df.loc[(df.Rank != 1)]
    df['Rank1']= df['Mkt Cap (Em)'].rank(ascending=False)
    ## This doesn't seem to work
    df = df.drop(df['Security'], 1)
    return df

def save_outputfile():
    #df = drop()
    df = ranking_mktcap()
    df.to_csv(r'S:\Index_Analytics\UK\Index Methodology\FTSE\Py_file_download\MonitoredList.csv', index=False)
    print("finished")

if __name__ == "__main__":
    main()
    read_csv()
    tickerchange()
    consolidate_AB_listings()
    ranking_mktcap()
    save_outputfile()

Upvotes: 0

Views: 282

Answers (3)

Robert Lodeke
Robert Lodeke

Reputation: 1

I had the same issue and all I did was add inplace = True

So it will be df = df.drop(df['Security'], 1, inplace = True)

Upvotes: 0

Renaud
Renaud

Reputation: 2819

Try by replacing

 df = df.drop(df['Security'], 1)

By

df.drop(['Security'],axis=1, inplace=True) 

Upvotes: 0

Stuart
Stuart

Reputation: 474

DataFrame.drop() takes the following: DataFrame.drop(self, labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise').

When you call df = df.drop(df['Security'], 1) it's using df['security'] as the labels to drop. And the 1 is being passed through the axis parameter.

If you want to drop the column 'Security' then you'd want to do:

df = df.drop('Security', axis=1)
# this is same as
df = df.drop(labels='Security', axis=1)
# you can also specify the column name directly, like this
df = df.drop(columns='Security')

Note: the columns= parameter can take a single lable (str) like above, or can take a list of column names.

Upvotes: 1

Related Questions