Reputation: 453
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?
Upvotes: 45
Views: 286221
Reputation: 1
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
Upvotes: 0
Reputation: 11
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
Upvotes: 1
Reputation: 633
value_counts()
is now a DataFrame method since pandas 1.1.0
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.value_counts.html
Upvotes: 11
Reputation: 166
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()
Upvotes: 0
Reputation: 3351
To get all the counts for all the columns in a dataframe, it's just df.count()
Upvotes: 15
Reputation: 375865
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())
Upvotes: 59