我刚刚尝试对数据框进行排序并使用了以下函数:
df[df.count >= df.count.quantile(.95)]
它返回错误:
AttributeError: 'function' object has no attribute 'quantile'
但是将系列括起来效果很好:
df[df['count'] >= df['count'].quantile(.95)]
这不是我第一次根据这种区别得到不同的结果,但通常也不会发生,而且我一直认为这是两个相同的对象。
为什么会发生这种情况?
最佳答案
因为count
是数据框的内置方法之一,当您使用 .
时它被识别为方法而不是列 count,即 .
优先考虑内置方法而不是列:
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] = ...
,使用上面的虚拟数据框:
# original data frame
df
# A B count
#0 1 2 4
#1 2 3 5
#2 3 4 6
使用点创建新列不起作用,C被设置为属性而不是列:
df.C = 2
df
# A B count
#0 1 2 4
#1 2 3 5
#2 3 4 6
虽然括号是向数据框添加新列的标准方法:
df['C'] = 2
df
# A B count C
#0 1 2 4 2
#1 2 3 5 2
#2 3 4 6 2
如果列已经存在,则假设数据框没有同名的属性,则使用点修改它是有效的(就像上面的 count 的情况一样):
df.B = 3
df
# A B count C
#0 1 3 4 2
#1 2 3 5 2
#2 3 3 6 2
关于python - dataframe.series 和 dataframe ['series' 之间有什么区别]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45156053/