【问题标题】:'numpy.ndarray' object has no attribute 'count'“numpy.ndarray”对象没有属性“count”
【发布时间】:2017-09-28 00:50:25
【问题描述】:

我有以下数据框:

df  = pd.DataFrame({'Label': list('AABCCC'), 'Values':  [1,2,3,4,np.nan,8] })

我想删除那些没有最少项目数(一个或更少)的组,所以我尝试了以下方法:

f = lambda x: x.Values.count() > 1

df.groupby('Label').filter(f)

但是,这引发了错误:

错误:“numpy.ndarray”对象没有属性“count”

哪里出错了?

【问题讨论】:

  • 试试这个:df.groupby('Label').filter(lambda x: len(x) > 1)

标签: python pandas numpy


【解决方案1】:

您似乎没有Valuesvalues 列,因此需要添加[],因为与values 函数冲突。

示例:

df = pd.DataFrame ({'values': [1,2,3,4,np.nan,8] })
print (df)
   values
0     1.0
1     2.0
2     3.0
3     4.0
4     NaN
5     8.0

#return numpy array
print (df.values)
[[  1.]
 [  2.]
 [  3.]
 [  4.]
 [ nan]
 [  8.]]

#select column values
print (df['values'])
0    1.0
1    2.0
2    3.0
3    4.0
4    NaN
5    8.0
Name: values, dtype: float64

您的解决方案对我来说效果很好,我还将.Values 更改为['Values']

df1 = df.groupby('Label').filter(lambda x: x['Values'].count() > 1)
print (df1)
  Label  Values
0     A     1.0
1     A     2.0
3     C     4.0
4     C     NaN
5     C     8.0

transformboolean indexing 的替代解决方案:

print (df.groupby('Label')['Values'].transform('count'))
0    2.0
1    2.0
2    1.0
3    2.0
4    2.0
5    2.0
Name: Values, dtype: float64

print (df.groupby('Label')['Values'].transform('count') > 1)
0     True
1     True
2    False
3     True
4     True
5     True
Name: Values, dtype: bool

print (df[df.groupby('Label')['Values'].transform('count') > 1])
  Label  Values
0     A     1.0
1     A     2.0
3     C     4.0
4     C     NaN
5     C     8.0

同时检查What is the difference between size and count in pandas?

【讨论】:

  • 感谢您的接受。顺便说一句,我认为使用. 选择更好更快,但是没有列valuessumcountmean,因为.sum.values...返回pandas 函数。所以更安全的是使用[],然后所有列名都可以正常工作。美好的一天,祝你好运!
猜你喜欢
  • 2020-09-22
  • 2020-02-21
  • 2020-12-08
  • 2019-12-10
  • 2017-07-10
  • 2020-05-10
  • 2019-11-04
  • 2017-05-24
  • 2021-06-14
相关资源
最近更新 更多