我只是尝试对数据框进行排序并使用以下函数:
df[df.count >= df.count.quantile(.95)]
它返回了错误:
AttributeError: 'function' object has no attribute 'quantile'
但是将这个系列包括在内可以正常工作:
df[df['count'] >= df['count'].quantile(.95)]
这不是我第一次根据这种区别获得不同的结果,但它通常也不会发生,而且我一直认为这些是两个相同的对象。
为什么会这样?
答案 0 :(得分:5)
由于count
是数据框内置方法之一,因此当您使用.
时,它会被识别为方法而不是列 count ,即{{1优先考虑列上的内置方法:
.
点和括号之间的另一个区别是,您不能使用点来创建新列。即如果列不存在,df = pd.DataFrame({
'A':[1,2,3],
'B':[2,3,4],
'count': [4,5,6]
})
df.count()
#A 3
#B 3
#count 3
#dtype: int64
df.count
# V V V V V V V V
#<bound method DataFrame.count of A B count
#0 1 2 4
#1 2 3 5
#2 3 4 6>
将不起作用,在这种情况下您必须使用括号。为df.column = ...
,使用上述虚拟数据框:
df[column] = ...
使用dot创建新列将不起作用,C被设置为属性而不是列:
# original data frame
df
# A B count
#0 1 2 4
#1 2 3 5
#2 3 4 6
括号是向数据框添加新列的标准方法:
df.C = 2
df
# A B count
#0 1 2 4
#1 2 3 5
#2 3 4 6
如果列已经存在,则使用点修改它是有效的,假设数据框没有具有相同名称的属性(如上面 count 的情况):
df['C'] = 2
df
# A B count C
#0 1 2 4 2
#1 2 3 5 2
#2 3 4 6 2