熊猫的尺寸和数量有何区别?

2024-12-16 08:35:00
admin
原创
176
摘要:问题描述:这就是熊猫groupby("x").count和的区别吗?groupby("x").sizesize 是否仅排除 nil ?解决方案 1:size包括NaN价值观,count但不:In [46]: df = pd.DataFrame({'a':[0,0,1,2...

问题描述:

这就是熊猫groupby("x").count和的区别吗?groupby("x").size

size 是否仅排除 nil ?


解决方案 1:

size包括NaN价值观,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 

解决方案 2:

熊猫的尺寸和数量有何区别?

其他答案指出了差异,但是,说“计算 NaN 而不计算”并不完全准确。虽然确实计算了 NaN,但这实际上是由于返回调用它的对象的大小(或长度)而导致的。当然,这还包括 NaN 的行/值。size`count`sizesize

总而言之,返回 Series/DataFrame 1size的大小,

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也是一个属性,返回 DataFrame 中的元素数(行 x 列)。


行为与GroupBy输出结构

GroupBy.size()除了基本区别之外,调用vs时生成的输出的结构也存在差异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`count当调用所有列时,返回一个 DataFrame ,而调用 Series 时,GroupBy.size`返回一个 Series。

原因是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,并且当没有传递任何内容时,熊猫决定不做任何假设。

解决方案 3:

只需在@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

解决方案 4:

当我们处理普通数据框时,唯一的区别是包含 NAN 值,这意味着在计算行数时计数不包括 NAN 值。

但是如果我们使用这些函数groupby,为了得到正确的结果,count()我们必须将任何数字字段与之关联以groupby获取确切的组数,而对于size()不需要这种类型的关联。

解决方案 5:

除了以上所有答案之外,我还想指出一个我认为重要的区别。

您可以将pandas'DataFrame大小和计数与 Java 的Vectors大小和长度关联起来。当我们创建一个向量时,会为其分配一些预定义的内存。当我们接近它可以容纳的最大元素数量时,会分配更多内存以容纳进一步的添加。同样,当DataFrame我们添加元素时,分配给它的内存也会增加。

属性size给出了分配给的内存单元的数量DataFrame,而count给出了实际存在的元素数量DataFrame。例如,
在此处输入图片描述

您可以看到,尽管中有 3 行DataFrame,但其大小却是 6。

此答案涵盖了 和DataFrame的大小和数量差异pandas Series。我还没有检查 会发生什么Series

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2545  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1551  
  建筑工程全生命周期涉及从项目规划、设计、施工到运营维护等多个复杂阶段,每个阶段都产生和依赖大量信息。PLM(产品生命周期管理)系统作为一种整合数据、流程和人员的数字化解决方案,正逐渐成为建筑行业实现高效协同与可持续发展的关键支撑。通过数字化转型,PLM系统能够优化各阶段的工作流程,提升项目整体质量和效率,为建筑工程的全...
plm是什么软件   1  
  产品生命周期管理(PLM)系统在企业资源成本率优化方面发挥着至关重要的作用。通过构建有效的数据模型,PLM系统能够整合企业各个环节的数据,为资源成本的精准分析和优化提供有力支持。这不仅有助于企业降低成本,还能提升产品质量和市场竞争力。PLM系统概述PLM系统是一种用于管理产品从概念设计到退役全生命周期过程中所有信息和流...
PLM项目管理软件   1  
  产品生命周期管理(PLM)系统在现代企业的产品研发、生产与管理过程中扮演着至关重要的角色。它整合了从产品概念设计到产品退役的全生命周期数据与流程,助力企业提升效率、降低成本并增强创新能力。随着技术的不断发展,到 2025 年,PLM 系统将具备一系列核心功能模块,这些模块将深度影响企业的运营与发展。产品数据管理模块产品...
plm是什么意思   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用