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


谢邀
答案是完全可以 。除此之外 。pandas还提供各种复杂的表格数据操作 。我们看看下面的例子
pandas
pandas:
https://pandas.pydata.org/
Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析 。同时也提供数据清洗功能 。pandas两个主要的数据结构包括DataFrame和Series 。
DataFrame是Pandas中的一个表格型的数据结构 。包含有一组有序的列 。每列可以是不同的值类型(数值、字符串、布尔型等) 。DataFrame即有行索引也有列索引 。可以被看做是由Series组成的字典 。
Series是一种类似于一维数组的对象 。是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成 。仅由一组数据也可产生简单的Series对象 。

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

文章插图
DataFrame
接下来我们用dataframe来实现一些对表格的count操作
创建一个dataframe的数据 。pandas中的dataframe等价于sql中的table
其他观点:
下面是我的实现过程 。使用df.groupby().apply(func)的方式实现的 。
df
Out[65]:
nameAgeHeightScore State
0Jane301654.6NY
1Nick20708.3TX
2Aaron221209.0FL
3Penelope40803.3AL
4Jaane201624.0NY
5Nicky30728.0TX
6Armour201249.0FL
7Ponting25813.0AL
def func(x):
return x[x.Age==20].Age.count(), x[x.Age==30].Age.count()
df.groupby(by=['State']).apply(func)
Out[64]:
State
AL(0, 0)
FL(1, 0)
NY(1, 1)
TX(1, 1)
dtype: object
本来想分别返回Age==20 和 Age==30 的人数 。返回两个字段的 。但是现在只是返回了一个字段 。字段值是一个tuple 。没有展开成两个字段
找到答案了 。apply的函数返回一个Series就行了
def func(x):
return pd.Series({'Age_20': x[x.Age==20].Age.count(), 'Age_30': x[x.Age==30].Age.count()})
df.groupby(by=['State']).apply(func)
Out[71]:
Age_20Age_30
State
AL00
FL10
NY11
TX11
其他观点:
当我们使用Python进行数据分析时 。有时可能需要根据DataFrame其他列中的值向pandas DataFrame添加一列 。
尽管这听起来很简单 。但是如果我们尝试使用if-else条件语句来做 。可能会变得有些复杂 。值得庆幸的是 。有一种使用numpy做到这一点的简单 。好方法!
要学习如何使用它 。我们来看一个特定的数据分析问题 。我们拥有4,000多个AAA教育推文的数据集 。附有图像的推文会获得更多的赞和转发吗?让我们做一些分析找出答案!
我们将从导入pandas和numpy开始 。并加载数据集以查看其外观 。
pandas dataframe可以实现SQL中的count case吗?

文章插图
我们可以看到我们的数据集包含有关每个推文的一些信息 。包括:
1)date —推文发布的日期
2)time —发推文的时间
3)tweet -该推文的实际文本
4)mentions -推文中提及的任何其他Twitter用户
5)photos —推文中包含的任何图像的URL
6)replies_count -在推文上的回复数量
7)retweets_count -推文的转发数
【pandas dataframe可以实现SQL中的count case吗?】8)likes_count —在推文上的喜欢次数
我们还可以看到photos数据的格式有些奇怪 。
使用np.where()添加具有正确/错误条件的pandas列
对于我们的分析 。我们只想查看带有图像的推文是否获得更多的交互 。因此我们实际上不需要图像URL 。让我们尝试创建一个名为的新列hasimage 。该列将包含布尔值- True如果该tweet包含图像 。False则不包含图像 。
为此 。我们将使用numpy的内置where()函数 。此函数按顺序接受三个参数:我们要测试的条件 。条件为true时分配给新列的值以及条件为false时分配给新列的值 。看起来像这样:
pandas dataframe可以实现SQL中的count case吗?

文章插图
在我们的数据中 。我们可以看到没有图像的推文始终[]在该photos列中具有值 。我们可以使用信息并np.where()创建新列hasimage 。如下所示:
pandas dataframe可以实现SQL中的count case吗?

文章插图
在上方 。我们可以看到我们的新列已添加到我们的数据集 。并且已正确标记了tweet 。其中包括图像为True 。其他图像为False 。
现在我们有了hasimage专栏 。让我们快速制作几个新的DataFrame 。一个用于所有图像推文 。一个用于所有无图像推文 。我们将使用布尔过滤器进行此操作:

推荐阅读