Pandas 执行类似SQL操作的4种方法

Pandas是数据处理中不可或缺的工具之一,除了数据的读写、清洗、转换等基本操作,Pandas还支持一些类似SQL的操作,而这些操作对于熟悉SQL的用户来说,极大地方便了数据的操作和分析。

Pandas提供的SQL类操作主要包括以下几种方法:

  1. merge: 将两个DataFrame按照指定的列进行合并(类似于SQL中的join操作)。
  2. groupby: 对DataFrame中的数据按照指定的列进行分组,进行聚合操作,如求和、均值等(类似于SQL中的group by操作)。
  3. pivot_table: 将DataFrame按照指定的行和列进行重塑,类似于Excel中的透视表(类似于SQL中的pivot操作)。
  4. melt: 将DataFrame从宽表转换为长表,方便数据的分析(类似于SQL中的unpivot操作)。

下面通过一个实例来演示Pandas如何执行SQL操作。

假设有以下两个表格students和classes:

students = pd.DataFrame({'name':['Alice','Bob','Charlie','David','Eva'],
                         'age':[18,19,17,20,18],
                         'gender':['female','male','male','male','female'],
                         'class_id':[1,2,2,1,2]})
classes = pd.DataFrame({'id':[1,2,3],
                        'class_name':['Math','English','History'],
                        'teacher':['Tom','Jack','Lucy']})

其中,students表格表示学生的相关信息,包括姓名、年龄、性别、所在班级;classes表格表示班级的相关信息,包括班级ID、班级名称、教师姓名。

现在需要使用Pandas完成以下几个操作:

  1. 查询所有学生的年龄、性别和所在班级名称。
  2. 统计每个班级的学生人数。
  3. 查询所有学生的姓名、班级名称和所在班级的教师姓名。

第一个操作可以使用merge和pivot_table方法实现。首先需要将students和classes表格按照class_id列进行合并(类似SQL的inner join操作),然后将结果重塑为以age、gender和class_name为行和列的透视表,代码如下:

result1 = pd.merge(students, classes, left_on='class_id', right_on='id', how='inner')
result1 = result1[['age', 'gender', 'class_name']]
result1 = pd.pivot_table(data=result1, index=['age', 'gender'], columns=['class_name'], aggfunc=len, fill_value=0)

第二个操作可以使用groupby方法实现。需要对students表格按照class_id列进行分组,然后使用size方法统计每个分组中的元素个数(即学生人数),代码如下:

result2 = students.groupby('class_id').size().reset_index(name='count')

第三个操作也可以使用merge方法实现。将students和classes表格按照class_id列进行合并(类似SQL的inner join操作),然后选取需要的列即可,代码如下:

result3 = pd.merge(students, classes, left_on='class_id', right_on='id', how='inner')
result3 = result3[['name', 'class_name', 'teacher']]

通过这个例子,我们可以看到Pandas的SQL类操作可以方便地完成表格的处理和分析,使得数据分析变得更加高效和便捷。

本文链接:https://my.lmcjl.com/post/19856.html

展开阅读全文

4 评论

留下您的评论.