pandas 中的大小和计数有什么区别?
What is the difference between size and count in pandas?
这就是pandas中groupby("x").count
和groupby("x").size
的区别?
size是否只排除nil?
size
includes NaN
values, count
不:
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()
不需要此类关联的组数。
What is the difference between size and count in pandas?
其他答案已经指出了差异,但是,不完全准确说“size
计算 NaN 而 count
不计算” .虽然 size
确实计算 NaN,但这实际上是 size
returns size(或length) 它被调用的对象。当然,这也包括 rows/values 是 NaN。
所以,总而言之,size
returns Series/DataFrame1,
的大小
df = pd.DataFrame({'A': ['x', 'y', np.nan, 'z']})
df
A
0 x
1 y
2 NaN
3 z
df.A.size
# 4
...而 count
计算非 NaN 值:
df.A.count()
# 3
请注意 size
是一个属性(给出与 len(df)
或 len(df.A)
相同的结果)。 count
是一个函数。
1. DataFrame.size
也是一个属性,returns DataFrame 中的元素数量(行 x 列)。
GroupBy
的行为 - 输出结构
除了基本差异外,调用 GroupBy.size()
与 GroupBy.count()
.
时生成的输出结构也存在差异
df = pd.DataFrame({
'A': list('aaabbccc'),
'B': ['x', 'x', np.nan, np.nan,
np.nan, np.nan, 'x', 'x']
})
df
A B
0 a x
1 a x
2 a NaN
3 b NaN
4 b NaN
5 c NaN
6 c x
7 c x
考虑一下,
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
returns 当您在所有列上调用 count
时一个 DataFrame,而 GroupBy.size
returns 一个系列。
原因是 size
对于所有列都是相同的,所以只返回一个结果。同时,为每一列调用 count
,因为结果将取决于每列有多少个 NaN。
与 pivot_table
的行为
另一个例子是 pivot_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_table
,你可以发出size
:
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
不行;返回一个空的 DataFrame:
df.pivot_table(index='A', columns='B', aggfunc='count')
Empty DataFrame
Columns: []
Index: [0, 1]
我相信这样做的原因是 'count'
必须在传递给 values
参数的系列上完成,当没有传递任何内容时,pandas 决定制作没有假设。
除了上述所有答案之外,我还想指出一个我认为很重要的区别。
您可以将 pandas
的 DataFrame
大小和计数与 Java 的 Vectors
大小和长度相关联。当我们创建一个向量时,一些预定义的内存被分配给它。当我们接近它可以容纳的最大元素数时,将分配更多内存以容纳进一步的添加。同样,在 DataFrame
中,随着我们添加元素,分配给它的内存也会增加。
size
属性给出了分配给 DataFrame
的内存单元数,而 count
给出了 DataFrame
中实际存在的元素数。例如,
你可以看到,即使 DataFrame
中有 3 行,它的大小也是 6。
此答案涵盖了 DataFrame
而非 pandas
Series
的大小和计数差异。我还没有检查 Series
.
会发生什么
这就是pandas中groupby("x").count
和groupby("x").size
的区别?
size是否只排除nil?
size
includes NaN
values, count
不:
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()
不需要此类关联的组数。
What is the difference between size and count in pandas?
其他答案已经指出了差异,但是,不完全准确说“size
计算 NaN 而 count
不计算” .虽然 size
确实计算 NaN,但这实际上是 size
returns size(或length) 它被调用的对象。当然,这也包括 rows/values 是 NaN。
所以,总而言之,size
returns Series/DataFrame1,
df = pd.DataFrame({'A': ['x', 'y', np.nan, 'z']})
df
A
0 x
1 y
2 NaN
3 z
df.A.size
# 4
...而 count
计算非 NaN 值:
df.A.count()
# 3
请注意 size
是一个属性(给出与 len(df)
或 len(df.A)
相同的结果)。 count
是一个函数。
1. DataFrame.size
也是一个属性,returns DataFrame 中的元素数量(行 x 列)。
GroupBy
的行为 - 输出结构
除了基本差异外,调用 GroupBy.size()
与 GroupBy.count()
.
df = pd.DataFrame({
'A': list('aaabbccc'),
'B': ['x', 'x', np.nan, np.nan,
np.nan, np.nan, 'x', 'x']
})
df
A B
0 a x
1 a x
2 a NaN
3 b NaN
4 b NaN
5 c NaN
6 c x
7 c x
考虑一下,
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
returns 当您在所有列上调用 count
时一个 DataFrame,而 GroupBy.size
returns 一个系列。
原因是 size
对于所有列都是相同的,所以只返回一个结果。同时,为每一列调用 count
,因为结果将取决于每列有多少个 NaN。
与 pivot_table
的行为
另一个例子是 pivot_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_table
,你可以发出size
:
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
不行;返回一个空的 DataFrame:
df.pivot_table(index='A', columns='B', aggfunc='count')
Empty DataFrame
Columns: []
Index: [0, 1]
我相信这样做的原因是 'count'
必须在传递给 values
参数的系列上完成,当没有传递任何内容时,pandas 决定制作没有假设。
除了上述所有答案之外,我还想指出一个我认为很重要的区别。
您可以将 pandas
的 DataFrame
大小和计数与 Java 的 Vectors
大小和长度相关联。当我们创建一个向量时,一些预定义的内存被分配给它。当我们接近它可以容纳的最大元素数时,将分配更多内存以容纳进一步的添加。同样,在 DataFrame
中,随着我们添加元素,分配给它的内存也会增加。
size
属性给出了分配给 DataFrame
的内存单元数,而 count
给出了 DataFrame
中实际存在的元素数。例如,
你可以看到,即使 DataFrame
中有 3 行,它的大小也是 6。
此答案涵盖了 DataFrame
而非 pandas
Series
的大小和计数差异。我还没有检查 Series
.