macintosh81
macintosh81

Reputation: 189

Attribute Error when getting unique column values

I am new to Python and Pandas. I am trying to write a function to get a unique list of my column values. My function looks like below, where "placename" is the attribute that I want to get unique values. 'placename' should be passed as a string argument,corresponding to the header of the csv file.

def get_city_list(state, type, placename):

     city_dir = os.path.join(baseDir, type + ".csv")
     city_df = pd.read_csv(city_dir, quotechar = '"', skipinitialspace = True, sep = ",") 

     state_df = city_df.loc[city_df["state"] == state] 

     city_list = state_df.placename.unique()

     return city_list

However, when I call this function, it throws a attribute error saying 'DataFrame' object has no attribute "placename". It seems that "placename" should not be a string, and when I substitute it as
city_list = state_df.cityname.unique(), it works, where cityname (without " ") is the actual header of the column in the original csv file. Since I want to make my function versatile,I want to find a way to deal with this case so that I dont have to manually change the content of "placename" every time.

Your help is greatly appreciated!

Thanks

Upvotes: 3

Views: 7468

Answers (1)

piRSquared
piRSquared

Reputation: 294488

The dot operator . is reserved to access attributes of an object. pandas is nice enough to make column names accessible via an attribute. But you can't do something like df."myplace"

Change your code to:

state_df[placename].unique()

This way, you are passing placename on to the getitem method.

Upvotes: 1

Related Questions