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

标签 python pandas

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

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/

相关文章:

python - 让 Selenium 导航到由 Flask 托管的页面时遇到问题

javascript - 如何在 javascript 页面上单击带有 selenium 的按钮

python - 在 pandas 列上应用函数

pandas - Python、Pandas 数据读取器和 Yahoo 错误 RemoteDataError : Unable to read URL

python - 数据帧列表 : Slicing a dataframe into a list of dataframes

python - Series.isin() 对于 'str' 和 'int' 类型值是否不一致?

python - Django 中的游标是否在打开的事务中运行?

python - Gql 在没有祖先本身的情况下获得祖先的所有 child

python - python pandas中的相对强度指数

python - 查找两个文件中唯一的句子