这是我参与更文挑战的第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并取反的方式来获得两个老师计分不同的索引。
输出大致如下:
聪明的同学已经发现了,为什么不直接使用不等于呢?这样就不用取反了。
甚至是为什么一定要索引进行一次过渡呢?直接使用不可以判断吗?比如如下代码:
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