#课程作业2补充——个人笔记#
配合上个笔记:课程作业2——Pandas入门基本操作-CSDN博客
作业用到的数据:
链接:https://pan.quark.cn/s/4f673346914c
提取码:gix8
一.准备工作
打开jupyter NoteBook
参照Python入门(含python基础语法+Miniconda搭建+Jupyter Notebook简单使用)-CSDN博客
新建notebook.如图
然后根据作业要求完成作业
二.作业详解
1. 导入pandas库
import pandas as pd
2. 列名更换为中文
df = pd.read_csv('pokemon.csv',names=['全国图鉴编号','姓名','属性1','属性2','种族值','体力','物攻','防御','特攻','特防','速度'],header=0)
设置header=0,能去除原来的表头
3. 分别存储单属性和双属性的妖怪
单属性妖怪的属性2为空值,双属性妖怪的属性2不为空
故可以利用isnull()函数和notnull()函数
#单属性妖怪的属性2为空值 single = df[df['属性2'].isnull()] single = single.drop(axis=1,columns=['属性2'],inplace=False) #inplace参数,默认是False,即只对数据进行修改创建并返回新的对象承载其修改结果 #如果inplace设置为True,那么不创建新的对象直接对原始对象进行修改。但会有警告 single.to_csv('single.csv') #双属性妖怪的属性2不为空 dual = df[df['属性2'].notnull()] dual.to_csv('dual.csv')
4. 保留#重复的第一条记录
用drop_duplicates()函数,keep='first'设置只保留第一次出现的重复行
data = df.drop_duplicates(subset=['全国图鉴编号'],keep='first',inplace=False) #keep:指定保留哪些重复行,设置为first表示保留第一次出现的重复行 #inplace: 不修改原来的数据,返回新的DataFrame #subset 指定要考虑重复的列。 data #删除后出现的重复值
5. 第一属性的种类数量和前三数量对应的种类
nunique()函数返回去重之后不同值的个数,即能求出第一属性的种类数量
df['属性1'].nunique() #属性1的种类数量 #nunique()函数返回的是去重之后不同值的个数 #unique()函数返回的是去重之后的不同值
df['属性2'].value_counts().head(3) #value_counts()是计数函数,默认返回降序结果。 #head(3)指定前三行
6. 第一属性和第二属性的组合种类
df.groupby(['属性1','属性2']).size() #groupby是分组函数,指定属性1和属性2为一组 #groupby().size()是查看分组后每组的数量
7. 找出指定列的最大值,平均值,方差,中位数
用describe()函数求值,用loc函数筛选指定列的指定数据
data = df.describe() #mean平均值,min最小值,max最大值,std是方差, data.loc[['mean','std','min','max','50%'],['种族值','体力','物攻','防御','特攻','特防','速度']] #用loc函数对行和列进行筛选
8. 将体力值超过100的替换为high,不足50的替换为low,否则设为mid
首先用data作为df的副本使用,后面对data进行操作,不影响df原本的数据
用for循环,分别具体到指定行指定列的那个数据,用if语句进行筛选,分别赋值
data = df.copy(deep=True) #copy()函数用于创建副本默认为浅拷贝即复制了原始df的引用而不是实际的数据如果对副本进行修改会影响原始的 数据 #设置deep=True,深拷贝,不会影响原来的数据 for i in range(len(data)): s = data.loc[i,'体力'] #i的值是从0到800,loc函数指定是体力那列,用i指定行 if int(s) > 100: data.loc[i,'体力'] = 'high' elif int(s) < 50: data.loc[i,'体力'] = 'low' else: data.loc[i,'体力'] = 'mid'
8. 对种族值进行降序排列,并存储为csv文件
标签:loc,入门,df,函数,详解,csv,data,Pandas,属性 From: https://blog.csdn.net/2301_80392115/article/details/140583973对值进行降序排列用sort_values()函数
data = df.sort_values(by=['种族值'],ascending=False) data.to_csv('sort.csv') data