{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

pandas dataframe可以实现SQL中的count case吗?

rottengeekrottengeek 回答0 收藏1
收藏问题

1条回答

microcosm1994

microcosm1994

回答于2022-06-28 14:12

谢邀

答案是完全可以,除此之外,pandas还提供各种复杂的表格数据操作,我们看看下面的例子

pandas

pandas官网:

https://pandas.pydata.org/

Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。pandas两个主要的数据结构包括DataFrameSeries

DataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。

Series是一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。

DataFrame

接下来我们用dataframe来实现一些对表格的count操作

创建一个dataframe的数据,pandas中的dataframe等价于sql中的table

from pandas import DataFrame
#创建一个表格数据,对于数据库中的table
data = {
"id":[1,1,1,2,2,2,2,3,3],
"domain":["vk.com","vk.com","twitter.com","vk.com","facebook.com", "vk.com","google.com","twitter.com","vk.com"],
"age":[5,6,7,8,9,10,11,12,13]}
frame = DataFrame(data)
print(frame)



  • 统计每个domain出现的次数

#统计name中每个名称的个数
print(frame.groupby("domain")["domain"].count())


  • 统计id和domain完全相同数据的个数(等价于sql中的联合查询)

#联合id和domain进行统计
print(frame.groupby(["id","domain"])["domain"].count())


  • 统计不重复的domain

#统计不重复
domianprint(frame.domain.unique())

  • 统计age大于10的name

#筛选出符合条件的dataframe
print(frame.where(frame["age"] > 10).dropna())


#统计domain出现的次数
print(frame.where(frame["age"] > 10).dropna().groupby("domain")["domain"].count())


实际上pandas能做的事情还有很多很多,我这里只是简单的列举了一部分而已,它还可以实现很多很复杂的操作,相对来说pandas对数据的操作要比sql操作表格简单的多,pandas还提供了一个to_sql方法可以去操作数据库,感兴趣的同学可以去了解一下。

我以前在博客上写过一些pandas的入门教程,如果有兴趣更进一步了解可以去看看我博客的文章

https://blog.csdn.net/sinat_29957455/article/category/9271181

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<