数据盲目分析(三)——案例带你快速入门Pandas(一)

这是我参与更文挑战的第3天,活动详情查看:更文挑战

想了一阵在简单介绍numpy过后,应该如何开始正式的pandas系列。它山之石,可以攻玉,看了下别人的教程。大多数人都选择先介绍下数据结构,一些汇总函数。但我觉得一系列文章的开始不应该用一些“字典”上的资料去复读给读者,读者看了也又不上,过一阵就忘了。

虚假的开始

对于pandas的数据结构,只需记住

  • Series是一维的
  • Series具有值,索引,(名字,数据类型)
  • DataFrame是二维的
  • 他在Series的基础上,增加了列索引(当然数据也变成了二维的了)

正式的开始

神说,数据分析要先有数据

那咱得先从文件读个数据

filepath = "神秘数据.csv"
data_table = pd.read_csv(filepath, encoding='utf-8')
复制代码

有了数据之后得有个目标。

不然要往哪里分析呢?

模拟场景如下:

全校有500名学生,老师小明和老师李晓华同时计算学生总分,并将其写入表中,如果小明和李晓华计分相同,我们认为计分正确。如果两位老师计分不同,我们就要根据学生学号进行sql查询,并在生成的表中找到学生的各科成绩,自行计算总分。

需求分析

这里简单的将流程拆分为

  • 找到小明和李晓华计分不同的学号,
  • 对计分错误的学生的各科成绩进行分组求和。

找到小明和李晓华计分不同的学号

data_clean =data_table_tmp[
        ~data_table_tmp.index.isin(
            data_table_tmp[ 
            data_table_tmp['小明老师计的总分'] == data_table_tmp['李晓华老师计的总分']
            ].index.to_list()
        )
    ]
复制代码

我是初学者,你给我整这么长的代码让我看?

慢慢来,也没说这个代码就是最终答案。

首先从中间慢慢往外看,

先是获取了data_table_tmp中两个老师计分相同的索引,再用.index.isin并取反的方式来获得两个老师计分不同的索引。

输出大致如下:
截屏2021-06-03 下午1.56.43.png

聪明的同学已经发现了,为什么不直接使用不等于呢?这样就不用取反了。

甚至是为什么一定要索引进行一次过渡呢?直接使用不可以判断吗?比如如下代码:

import pandas as pd

filepath = "神秘.csv"
data_table_tmp = pd.read_csv(filepath, encoding='utf-8')

data_clean =data_table_tmp[
            data_table_tmp['小明老师计的总分'] != data_table_tmp['李晓华老师计的总分']
    ]
data_clean
复制代码

事实上在数据分析的场景中,由于要考虑多个条件,很可能代码越写越冗余,因此各位掘友也要时刻审视自己的代码,看看是否“蓦然回首那人却在灯火阑珊处”。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享