I keep getting different attribute errors when trying to run this file in ipython...beginner with pandas so maybe I'm missing something

Code:

from pandas import Series, DataFrame import pandas as pd import json nan=float('NaN') data = [] with open('file.json') as f: for line in f: data.append(json.loads(line)) df = DataFrame(data, columns=['accepted', 'user', 'object', 'response']) clean = df.replace('NULL', nan) clean = clean.dropna() print clean.value_counts() AttributeError: 'DataFrame' object has no attribute 'value_counts' 

Any ideas?

1

6 Answers

value_counts is a Series method rather than a DataFrame method (and you are trying to use it on a DataFrame, clean). You need to perform this on a specific column:

clean[column_name].value_counts() 

It doesn't usually make sense to perform value_counts on a DataFrame, though I suppose you could apply it to every entry by flattening the underlying values array:

pd.value_counts(df.values.flatten()) 
2

To get all the counts for all the columns in a dataframe, it's just df.count()

1

value_counts() is now a DataFrame method since pandas 1.1.0

value_counts work only for series. It won't work for entire DataFrame. Try selecting only one column and using this attribute. For example:

df['accepted'].value_counts() 

It also won't work if you have duplicate columns. This is because when you select a particular column, it will also represent the duplicate column and will return dataframe instead of series. At that time remove duplicate column by using

df = df.loc[:,~df.columns.duplicated()] df['accepted'].value_counts() 

I had the same problem, it was working but now for some reason it is not. I replaced it with a groupby:

grouped = pd.DataFrame(data.groupby(['col1','col2'])['col2'].count()) grouped.columns = ['Value_counts'] grouped 

If you are using groupby(), just create a new variable to store data.groupby('column_name') then after take that variable and access that column again by applying value_counts(). Like df=data.groupby('city'), after you may say df['city'].value_counts(). This worked for me

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy