属性错误:'DataFrame'对象没有属性

45
我在ipython中尝试运行这个文件时,不断收到不同的属性错误...作为一个pandas的初学者,可能我漏掉了什么。
代码:

我在ipython中尝试运行这个文件时,不断收到不同的属性错误...作为一个pandas的初学者,可能我漏掉了什么

代码:

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'

有任何想法吗?


未来搜索者注意:如果您选择了重复的列名,您将得到一个数据框而不是一个系列! - ptim
6个回答

59

value_counts 方法是 Series 类的方法,而不是 DataFrame 类的方法(您正在尝试在 DataFrame clean 上使用它)。 您需要在特定列上执行此操作:

clean[column_name].value_counts()

通常在DataFrame上执行value_counts没有意义,不过你可以通过展开底层的值数组将其应用于每个条目:

通常不适合在DataFrame上进行value_counts操作,但是如果必要,你可以通过展平基础值数组将其应用于每个条目。

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

当我通过 iloc 获取列时,它没有工作。 - Zeeshan Ahmad Khalil
1
value_counts() 自 pandas 1.1.0 起已成为 DataFrame 方法 -- 发布了另一个答案 https://dev59.com/0GIk5IYBdhLWcg3wUsnv#65004307 - peractio

15
为了获取数据框中所有列的计数,只需要使用df.count()

5
df.count()df['col'].value_counts()series.value_counts() 的结果是不同的!但是,对于想要使用 df.count() 的人来说,你的帖子可能仍然有帮助。 - Nate Anderson

11

1

我曾经遇到过同样的问题,它曾经工作正常,但现在出了一些问题。我用groupby来替换它:

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

0
如果你正在使用 groupby(),只需创建一个新变量来存储 data.groupby('column_name') 的数据,然后再通过应用 value_counts() 访问该列。像 df=data.groupby('city'),之后你可以说 df['city'].value_counts()。这对我有用。

0

value_counts仅适用于Series。它不适用于整个DataFrame。尝试仅选择一列并使用此属性。 例如:

df['accepted'].value_counts()

如果您有重复的列,也不会起作用。这是因为当您选择特定列时,它还将表示重复列,并返回数据框而不是系列。那时候,请使用以下方法删除重复的列:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接