Mr-Simple001

一、多表查询

原文件是:

       

 

 

 1.联合查询:查询学生表对应的成绩表的学生成绩。

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
students = pd.read_excel(\'多表查询.xlsx\',sheet_name=\'学生表\')
scores = pd.read_excel(\'多表查询.xlsx\',sheet_name=\'成绩表\')

exl = students.merge(scores,on=\'ID\')
print(exl)

  效果:查出结果是保留了公有的数据

      

 

 2.联合查询:查询学生表对应的成绩表的学生成绩。保留学生表数据

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
students = pd.read_excel(\'多表查询.xlsx\',sheet_name=\'学生表\')
scores = pd.read_excel(\'多表查询.xlsx\',sheet_name=\'成绩表\')

exl = students.merge(scores,how=\'left\',on=\'ID\')
print(exl)

   效果:

      

 

 3.联合查询:查询学生表对应的成绩表的学生成绩。保留学生表数据-->分数保留整数,没有匹配到显示0,on参数是两个表都有这个列名就可以是用,如果不一样就使用left_on=,right_on=

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
students = pd.read_excel(\'多表查询.xlsx\',sheet_name=\'学生表\')
scores = pd.read_excel(\'多表查询.xlsx\',sheet_name=\'成绩表\')

exl = students.merge(scores,how=\'left\',left_on=\'ID\',right_on=\'ID\').fillna(0)
exl[\'分数\'] = exl.分数.astype(int)
print(exl)

  效果:

      

 

 4.以上1,2,3,是用的merge方法,现在看看用join: 首先join要指定index_col。之后用how=参数控制是左连接how=‘left’还有右连接how=‘right’,还是取交集how=\'inner\'

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
students = pd.read_excel(\'多表查询.xlsx\',sheet_name=\'学生表\',index_col="ID")
scores = pd.read_excel(\'多表查询.xlsx\',sheet_name=\'成绩表\',index_col="ID")

exl_left = students.join(scores,how=\'left\').fillna(0)
exl_right = students.join(scores,how=\'right\').fillna(0)
exl_inner = students.join(scores,how=\'inner\').fillna(0)
# exl[\'分数\'] = exl.分数.astype(int)
print(exl_left)
print(exl_right)
print(exl_inner)

  效果:

          

 

 

 5.pandas对Excel数据校验:满分是100分的试卷

原文件:

 

 1.把不是0-100的分数打印出来,axis参数:0是按照列来,1 是按照行来。如果显示不齐,把print(f\'{row.ID} exl{row.学生} 数据校验0-100 {row.分数}\')空格换成\t 制表符就OK了

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
exl = pd.read_excel(\'数据校验.xlsx\')
def fen_jiaoyao(row):
    try:
        assert 0<=row.分数<=100
    except:
        print(f\'{row.ID} exl{row.学生} 数据校验0-100 {row.分数}\')
exl.apply(fen_jiaoyao,axis=1)

  效果:

      

2.拆分数据:按照一定的条件把学生和分数分别拆分出来

 

 

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
exl = pd.read_excel(\'数据拆分.xlsx\',index_col=\'ID\')
df = exl[\'学生\分数\'].str.split(\' \',n=2,expand=True)
exl["学生"] = df[0]
exl["分数"] = df[1]
exl = exl.drop([\'学生\分数\'],axis=1) #删除列
print(exl)

  效果:

      

 

 3.删除行和列操作:

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
exl = pd.read_excel(\'数据拆分.xlsx\',index_col=\'ID\')
df = exl[\'学生\分数\'].str.split(\' \',n=2,expand=True)
exl["学生"] = df[0]
exl["分数"] = df[1]
exl = exl.drop([\'学生\分数\'],axis=1) #删除列
exl = exl.drop([2,3])
print(exl)

  效果:

      

 

 二、数据统计:原数据

 

 

 1.求 加两列每个同学的总分数和平均分数,加一行求每个科目的平均分数

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
exl = pd.read_excel(\'数据统计.xlsx\',index_col=\'ID\')
#拿到三次考试的成绩进行数据统计
shuju = exl[[\'语文\',\'数学\',\'英语\']]
#按行求和、求平均值
hang_sum = shuju.sum(axis=1)
hang_mean = shuju.mean(axis=1)
exl[\'总分数\'] = hang_sum
exl[\'平均分\'] = hang_mean
#按列求和、求平均值
# lie_sum = shuju.sum()
lie_mean = shuju.mean()
lie_mean["姓名"] = "平均数"
lie_mean["总分数"] = ""
lie_mean["平均分"] = ""
exl=exl.append(lie_mean,ignore_index=True)

print(exl)

  效果:

      

2. 在1的基础上,如果想求总分数的平均值和平均值的平均值

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
exl = pd.read_excel(\'数据统计.xlsx\',index_col=\'ID\')
#拿到三次考试的成绩进行数据统计
shuju = exl[[\'语文\',\'数学\',\'英语\']]
#按行求和、求平均值
hang_sum = shuju.sum(axis=1)
hang_mean = shuju.mean(axis=1)
exl[\'总分数\'] = hang_sum
exl[\'平均分\'] = hang_mean
#按列求和、求平均值
# lie_sum = shuju.sum()
# lie_mean = shuju.mean()
lie_mean = exl[[\'语文\',\'数学\',\'英语\',\'总分数\',\'平均分\']].mean()
lie_mean["姓名"] = "平均数"
# lie_mean["总分数"] = ""
# lie_mean["平均分"] = ""
exl=exl.append(lie_mean,ignore_index=True)

print(exl)

  效果:

      

 

 3.pandas对Excel数据去重

原数据

 

 1.去重数据,drop_duplicates函数,参数subset=用来指定按照那一列或者那几列去重。多列传list。参数keep= 用来指定保留前面还是后面的数据。keep=‘first ’默认的保留前面的数据,keep=\'last\' 保留后面的数据

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
exl = pd.read_excel(\'数据去重.xlsx\')
exl = exl.drop_duplicates(subset=\'姓名\',keep=\'last\')
print(exl)

  效果:

      

 

 2.找出重复数据:

  1.找出重复数据的索引

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
exl = pd.read_excel(\'数据去重.xlsx\')
dupe = exl.duplicated(subset=\'姓名\')
#找出重复数据
dupe = dupe[dupe==True]#简写是dupe = dupe[dupe]
print(dupe)
# 有重复数据显示True
# print(dupe.any())

  效果是:

      

 

   2.通过拿到这个索引来定位重复数据

  

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
exl = pd.read_excel(\'数据去重.xlsx\')
dupe = exl.duplicated(subset=\'姓名\')
#找出重复数据
dupe = dupe[dupe==True]#简写是dupe = dupe[dupe]
exl_chong = exl.iloc[dupe.index]
print(exl_chong)

    效果:

        

 3.pandas对Excel行列互换

 

 

 

# *_*coding:utf-8 *_*
# @Author : zyb
import pandas as pd
exl = pd.read_excel(\'行列互换.xlsx\',index_col=\'姓名\')
exl = exl.transpose()
print(exl)

  效果:

           

 

分类:

技术点:

相关文章: