本系列中教学数据挖掘,主要用Python3中pandas的包。
本文主要用于楼主自己总结复习,若是小白想学习,建议还是自己动手操作一下,只看答案代码只是“了解”,远不到“理解”、“运用”等层次,共勉!
本文先总结‘查看数据’、‘数据索引’两部分题目,即DA1-DA8.
题目:
现有一个Nowcoder.csv文件,它记录了牛客网的部分用户数据,包含如下字段(字段与字段之间以逗号间隔):
Nowcoder_ID:用户ID
Level:等级
Achievement_value:成就值
Num_of_exercise:刷题量
Graduate_year:毕业年份
Language:常用语言
Continuous_check_in_days:最近连续签到天数
Number_of_submissions:提交题目数量
Last_submission_time:最后一次提交题目日期
通用导入库、读取文件操作:
Import pandas as pd
data=pd.read_csv('Nowcoder.csv',sep=',',dtype=object)
#pd.read是pandas库中读取csv文件的命令。
#参数 sep=',' 指定了文件中数据的分隔符为逗号;参数"dtype=object"表示读取的数据类型为Python对象类型。比如防止将年份识别成小数
#下题中有些命令不需要设置dtype格式,默认格式才能符合要求。
注意:Nowcoder.csv文件需要在运行路径中,由于楼主是在牛客网进行在线解题,即无需下载到本地,如有读者想在本地环境下复现则需要弄一个csv数据集文件在运行路径。(或去牛客网在线解题)
1.输出该数据集的前6行
print(data.head(6))
#.head()默认展示前5行,如像题目有指定前x行,则在括号中加入x数字即可
1.输出:
2.输出该数据集的行数与列数
print(data.shape)
2.输出:
3.输出该数据集第10行的全部信息,每列信息单独成行
data.iloc[10,:]
#data.loc[10,:]
#.iloc和.loc都是选取data数据中某行某列的操作
#loc函数:通过行索引 “Index” 或者"columns"中的具体值来取行、列数据。
#iloc函数:通过行号或者列号来取行、列数据(如取第二行的数据、取第0列的数据)。
#即iloc的输入量不能是“index”,比如此题中不能输入data.iloc(1,'Level')
#应该是data.loc(1,'Level')或data.iloc(1,1)
#具体用法可参考下面博客
用法参考:pandas中loc和iloc用法_Anneaisun1995的博客-优快云博客
3.输出:
4.输出该数据集第10行到第20行的常用语言,每行数据单独成行
print(data.loc[[10:20],'Language'])
#loc中行切片索引是左闭右闭,iloc中是左闭右开
4.输出:
5.输出该数据集每列信息是否有为空值
print(data.isna().any())
#可以是any(axis=0) axis=0表示在每个列上应用函数.不指定则默认,也是axis=0
#.isna判断是否为none,如果有空值,则返回true
#any () 函数用于判断给定的可迭代参数 iterable 是否都为 False。
#如果是,any ()操作后的结果返回 False。
#如果给定的可迭代参数 iterable其中有一个为 True,any ()操作后的结果则返回 True。
5.输出:
6.输出该数据集中语言为Python对应的所有列的信息,包括列号。
data1=data[data['Language']=='Python']
#'字符串'中大小写也要完全一致!不然查找不到
print(data1)
或者笔者一开始用笨方法:
d=[]
for i in range(data.shape[0]):
if data.loc[i,'Language']=='Python':
d.append(i)
else:
pass
print(data.loc[d,:])
#range(52)表示0到51所有数字。
#数据是第0行到第51行,shape是(52,8),所以不会漏最后一行的检查。
6.输出:
7.输出该数据集中语言为Python对应的成就值这一列的信息,包括列号。
print(data[data['Language']=='Python']['Achievement_value'])
#data['Language']=='Python'表示在data的language列中找到是Python哪些行
#data[data[...]]就表示那些行数据
#在后面加[‘Achievement...’]表示在那些行中表示出Achievement..这一列数据
或者分步写:
data1=data[data['Language']=='Python']
print(data1['Achievement_value'])
7.输出:
8.输出该文件最后5行用户的用户ID、等级、成就值、常用语言等数据,包括行号
print((data.tail(5)).iloc[:,[0,1,2,5]])
#print((data.tail(5)).loc[:,['用户ID','等级','成就值','常用语言'])
#上一行标签懒得打英文了。。
或者:
print(data.iloc[-5:][['Nowcoder_ID', 'Level', 'Achievement_value', 'Language']])
此处感觉有点不太理解iloc列的用法,不知道是不是该用loc,存疑。
输出: