dataframe.series和dataframe ['series']之间有什么区别?

时间:2017-07-18 01:32:45

标签: python pandas

我只是尝试对数据框进行排序并使用以下函数:

df[df.count >= df.count.quantile(.95)]

它返回了错误:

AttributeError: 'function' object has no attribute 'quantile'

但是将这个系列包括在内可以正常工作:

df[df['count'] >= df['count'].quantile(.95)]

这不是我第一次根据这种区别获得不同的结果,但它通常也不会发生,而且我一直认为这些是两个相同的对象。

为什么会这样?

1 个答案:

答案 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