无法在新列上调用value_counts

时间:2015-04-26 00:00:33

标签: pandas dataframe

我在数据集中创建了一个新列,如下所示:

df['new_col'] = [ True if v > 0 else False for v in df.old_col ]

当我在新列上调用value_counts()时,它只在我执行

时有效
df['new_col'].value_counts() # works fine

df.new_col.value_counts() 

给出了这个错误:

AttributeError: 'list' object has no attribute 'value_counts'

我很困惑为什么会发生这种情况......我不能在新列上使用点语法吗?任何建议都非常感谢,谢谢!

1 个答案:

答案 0 :(得分:0)

正如Alexander所说,看起来你已经设置了属性而不是新系列。您必须使用括号表示法分配新列:

In [11]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])

In [12]: df['C'] = [1, 2]

In [13]: type(df.C)
Out[13]: pandas.core.series.Series

没有它你只是分配一个属性(而且熊猫不知道你希望这个是一个列):

In [14]: df.D = [1, 2]

In [15]: type(df.D)
Out[15]: list

您无法使用括号表示法访问此属性:

In [16]: df['D']
KeyError: 'D'

出于这个原因,我喜欢在整个代码中使用括号始终,这样我 - 和读者 - 知道它是一列......(explicit is better than implicit

注意:这实际上是非常有用的行为,因为(一方面)它允许您将元数据设置为DataFrame。同样,您可以将属性(或方法)分配给pd.DataFrame,以便可以将其用于任何DataFrame。

In [21]: pd.DataFrame.x = 1

In [22]: df.x
Out[22]: 1

(这有时可能很有用,但请谨慎使用!!!)