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()
vs
GroupBy.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]