Python 熊猫的大小和数量有什么区别?
这就是熊猫的Python 熊猫的大小和数量有什么区别?,python,pandas,numpy,nan,difference,Python,Pandas,Numpy,Nan,Difference,这就是熊猫的groupby(“x”).count和groupby(“x”).size之间的差异 大小是否仅排除零?包括NaN值,不包括: In [46]: df = pd.DataFrame({'a':[0,0,1,2,2,2], 'b':[1,2,3,4,np.NaN,4], 'c':np.random.randn(6)}) df Out[46]: a b c 0 0 1 1.067627 1 0 2 0.554691 2 1 3 0.458
groupby(“x”).count
和groupby(“x”).size
之间的差异
大小是否仅排除零?包括NaN
值,不包括:
In [46]:
df = pd.DataFrame({'a':[0,0,1,2,2,2], 'b':[1,2,3,4,np.NaN,4], 'c':np.random.randn(6)})
df
Out[46]:
a b c
0 0 1 1.067627
1 0 2 0.554691
2 1 3 0.458084
3 2 4 0.426635
4 2 NaN -2.238091
5 2 4 1.256943
In [48]:
print(df.groupby(['a'])['b'].count())
print(df.groupby(['a'])['b'].size())
a
0 2
1 1
2 2
Name: b, dtype: int64
a
0 2
1 1
2 3
dtype: int64
只需在@Edchum的答案中添加一点,即使数据没有NA值,count()的结果也会更加详细,使用前面的示例:
grouped = df.groupby('a')
grouped.count()
Out[197]:
b c
a
0 2 2
1 1 1
2 2 3
grouped.size()
Out[198]:
a
0 2
1 1
2 3
dtype: int64
当我们处理普通数据帧时,唯一的区别是包含NAN值,即计数行时计数不包含NAN值 但是,如果我们将这些函数与
groupby
一起使用,那么为了通过count()
获得正确的结果,我们必须将任何数字字段与groupby
关联,以获得确切的组数,size()
不需要这种关联
熊猫的大小和数量有什么区别?
其他答案已经指出了差异,但是,说“size
计数n,而count
不计数”并不完全准确。虽然size
确实计算NaN,但这实际上是size
返回调用对象的大小(或长度)的结果。当然,这也包括NaN的行/值
总之,size
返回序列/DataFrame1的大小
…而count
对非NaN值进行计数:
df.A.count()
# 3
请注意,size
是一个属性(给出的结果与len(df)
或len(df.A)
相同)<代码>计数是一个函数
一,DataFrame.size
也是一个属性,返回数据框中的元素数(行x列)
具有
GroupBy
-输出结构的行为
除了基本的区别之外,调用GroupBy.size()
vsGroupBy.count()
时生成的输出的结构也有区别
考虑一下
df.groupby('A').size()
A
a 3
b 2
c 3
dtype: int64
对,
df.groupby('A').count()
B
A
a 2
b 0
c 2
GroupBy.count
在所有列上调用count
时返回一个数据帧,而GroupBy.size
返回一个序列
原因是size
对于所有列都是相同的,因此只返回一个结果。同时,为每列调用计数
,因为结果取决于每列有多少个NAN
透视表的行为 另一个例子是
pivot\u table
如何处理此数据。假设我们要计算
df
A B
0 0 1
1 0 1
2 1 2
3 0 2
4 0 0
pd.crosstab(df.A, df.B) # Result we expect, but with `pivot_table`.
B 0 1 2
A
0 1 2 1
1 0 0 1
使用pivot\u表
,您可以发布大小
:
df.pivot_table(index='A', columns='B', aggfunc='size', fill_value=0)
B 0 1 2
A
0 1 2 1
1 0 0 1
但是count
不起作用;返回一个空数据帧:
df.pivot_table(index='A', columns='B', aggfunc='count')
Empty DataFrame
Columns: []
Index: [0, 1]
我相信这样做的原因是,必须对传递给
values
参数的序列执行'count'
,当没有传递任何内容时,pandas决定不做任何假设。除了上述所有答案之外,我还想指出另一个我似乎很重要的差异
您可以将Panda的Datarame
大小和计数与Java的向量
大小和长度关联起来。当我们创建向量时,一些预定义的内存被分配给它。当我们在添加元素时接近它可以占用的元素数量时,就会为它分配更多的内存。类似地,在DataFrame
中,当我们添加元素时,分配给它的内存会增加
Size属性给出分配给DataFrame
的内存单元数,而count给出实际存在于DataFrame
中的元素数。例如
您可以看到,尽管数据帧中有3行,但其大小为6
这个答案涵盖了与
数据帧
相关的大小和计数差异,而不是熊猫系列
。我没有检查系列发生的情况文档说,该大小“返回NDFrame中的元素数”,并计算“返回系列在请求轴上的非NA/null观察数。也适用于非浮点数据(检测NaN和None)”接受的答案说明差异包括或不包括NaN
值,必须注意这是次要的一点。比较具有多个系列的数据帧的df.groupby('key').size()和df.groupby('key').count()的输出。区别很明显:count
与任何其他聚合函数(mean
,max
…)一样工作,但size
特定于获取组中索引项的数量,因此不会查看对该函数没有意义的列中的值。请参见@cs95以获得准确的解释。计数是否等同于设置和大小组合编辑似乎是size
中的count
。@QM.py不,它不是。解释了groupby
输出中出现差异的原因。我认为,当设置系列的大小时,count也会返回一个数据帧。size()函数仅在.column()时获取特定列的聚合值用于每一列。@Mr_和Mrs_D size返回一个integer@boardtcdf.size返回一个数字——这里讨论了groupby方法,请参阅问题中的链接。至于我的问题——count和size确实在“绑定”时分别返回DataFrame和Series到DataFrameGroupBy实例-在问题中,它们都绑定到SeriesGroupBy,因此它们都返回一个Series实例
df
A B
0 0 1
1 0 1
2 1 2
3 0 2
4 0 0
pd.crosstab(df.A, df.B) # Result we expect, but with `pivot_table`.
B 0 1 2
A
0 1 2 1
1 0 0 1
df.pivot_table(index='A', columns='B', aggfunc='size', fill_value=0)
B 0 1 2
A
0 1 2 1
1 0 0 1
df.pivot_table(index='A', columns='B', aggfunc='count')
Empty DataFrame
Columns: []
Index: [0, 1]