Pandas学习记录



前言

大三上数据可视化,数据预处理作业 学习记录


一、Series

  1. 通过一组数据初始化
    在这里插入图片描述

  2. 获取数组表现形式和索引对象
    在这里插入图片描述

  3. 初始化Series (自定义索引)
    在这里插入图片描述

  4. 通过索引获取值和修改值

  5. 判断Series 对象是否存在该索引
    在这里插入图片描述

  6. 通过字典初始化Series
    在这里插入图片描述

  7. 通过字典初始化的基础上按照指定索引顺序排序,如果对应索引值不存在,则为NaN
    在这里插入图片描述

  8. NaN表示缺失值。isnull 和 notnull 可用于检测缺失数据
    在这里插入图片描述

  9. 对于两个Series对象,通过相同索引可直接对相应值进行算术运算
    在这里插入图片描述

  10. Series对象及其索引设置 name 属性
    在这里插入图片描述


二、DataFrame

  1. 通过等长的列表或Numpy数组初始化
    在这里插入图片描述
  2. 指定索引数组,不存在的使用NaN表示
    在这里插入图片描述
  3. 获取指定列
    在这里插入图片描述
  4. 获取指定行
    在这里插入图片描述
  5. 给指定列赋值
    在这里插入图片描述
  6. 使用Series 赋值指定列,按照索引匹配赋值,不存在则赋为NaN
    在这里插入图片描述
  7. 为不存在的列赋值默认会创建一个新列。
    在这里插入图片描述
  8. 删除指定列,如果删除的该列不存在,则会报错
    在这里插入图片描述
  9. 索引对象Index不可修改
    在这里插入图片描述
  10. Index 的方法与属性
    在这里插入图片描述

三、Pandas的主要方法

  1. 重建索引:创建一个适应新索引的新对象
    在这里插入图片描述
    reindex 函数的参数:
    在这里插入图片描述
    :重置索引

    # drop属性,默认为false。将之前的索引作为新的一列属性。
    data.reset_index(inplace=True,drop=True)
    
  2. 删除指定行或列
    在这里插入图片描述
    删除任意轴上的索引值
    在这里插入图片描述

  3. 索引、选取和过滤
    在这里插入图片描述

  4. 填充值
    在这里插入图片描述

  5. 排序与排名
    在这里插入图片描述
    排名
    在这里插入图片描述

  6. 统计与汇总
    在这里插入图片描述
    在这里插入图片描述

  7. 相关系数与协方差
    在这里插入图片描述

  8. NaN的处理方法
    在这里插入图片描述


四、作业要求即代码实现

根据所给的2004-2016年流感数据,按照数据预处理PPT的要求,完成流感数据的预处理及合并操作。

实现效果图:
在这里插入图片描述

代码如下: 使用Jupyter Notebook 编写。(代码注解更为实用)

from pandas import Series, DataFrame
import pandas as pd
import numpy as np
import os

basePath = "F:/firefox_download/flu_data/by_year/"

def readFluCsvData(filename):
    # 用pandas读入csv文档时,会出现中文解析问题,加上 encoding='gbk' 即可
    data = pd.read_csv(basePath+filename,encoding='gbk')
    

    # 暴力修改列名
    data.columns = ['tmp','地区','发病数','死亡数','发病率','死亡率']

    # 去除多余的列
    # del data['tmp']
    # data = data.drop('tmp',axis=1)
    data.drop('tmp',axis=1,inplace=True)

    # 去除多余的行
    # data = data.drop([0,1])
    data.drop([0,1],inplace=True)
    data.drop(data.tail(1).index,inplace=True) # data.tail(n).index 获取末尾n行的索引

    # 填充NaN为0
    # data = data.fillna(0)
    data.fillna(0,inplace=True)

    # 重置索引。drop属性,默认为false。将之前的索引作为新的一列属性。
    data.reset_index(inplace=True,drop=True)
    
    year = filename.split(".")[0]
    
    # 增加年份属性
    data['年份'] = year+'年'
    
    # 对整个DataFrame 的内容去除空格
    data.replace('\s+','',regex=True,inplace=True) 
    
    return data

def readYearPeopleData(filename):
    people = pd.read_csv("F:/firefox_download/flu_data/"+filename, encoding='gbk',header=None,sep='\t')
    people.columns = ['data']
    people = people['data'].str.split(',',expand=True)

    # 去除头三行
    people.drop(people.head(3).index, inplace=True)

    # 去除尾两行
    people.drop(people.tail(2).index, inplace=True)
    
    # 对整个DataFrame 的内容去除空格
    people.replace('\s+','',regex=True,inplace=True) 

    # 将当前第一行作为列表名称
    array = np.array(people)  # 将people转换为list对象
    list = array.tolist()     # 将array转换为list
    list = list[0]           # 获取第一行的数据

    people.columns = list
    people.drop([3],inplace=True)

    # 重置索引。drop属性,默认为false。将之前的索引作为新的一列属性。
    people.reset_index(inplace=True,drop=True)

    # 统一地区名的格式
    people.loc[people['地区'] == '内蒙古自治区','地区'] = '内蒙古'
    people.loc[people['地区'] == '广西壮族自治区','地区'] = '广西'
    people.loc[people['地区'] == '西藏自治区','地区'] = '西藏'
    people.loc[people['地区'] == '宁夏回族自治区','地区'] = '宁夏'
    people.loc[people['地区'] == '新疆维吾尔自治区','地区'] = '新疆'
    
    # 去除多余列
    extraColumns = ['2003年','2002年','2001年','2000年','1999年','1998年','1997年']
    people.drop(['2003年','2002年','2001年','2000年','1999年','1998年','1997年'],axis=1,inplace=True)
    
    # 以上只是单纯的读取了people.csv中的值,还需转为指定格式,才能合并
    haha = DataFrame(np.arange(3).reshape(1,3))
    
    # 需转为这种格式才能合并
    haha.columns = ['地区','年份','总人口数'] 

    # 获取地点集合
    locations = people['地区'].tolist()
    # 获取年份集合
    years = people.columns.tolist()[1:14]
    # 年份集合的个数
    yearNum = len(years)

    for location in locations:
        hat = DataFrame(np.arange(yearNum*3).reshape(yearNum,3))
        hat.columns = ['地区','年份','总人口数']
        hat['地区'] = location
        hat['年份'] = years
        for year in years:
            # 获取people表中的对应地区的索引值
            in1 = people[people['地区'] == location].index.tolist()[0]
            # 获取被拼接表的对应年份的索引值
            in2 = hat[hat['年份'] == year].index.tolist()[0]
            # 获取people表中的对应地区对应年份的总人口数
            num = people.loc[in1,year]
            # 设置被拼接表的对应地区对应年份的总人口数
            hat.loc[in2,'总人口数'] = num

        # 进行拼接    
        haha = pd.concat([haha,hat])

    # 重新设置索引
    haha.reset_index(inplace=True,drop=True)
    # 删除多余的第一行
    haha.drop([0],inplace=True)
    
    return haha


# 获取指定路径下的所有文件名
myListDir = os.listdir(basePath)

# 获取第一个csv的数据
data = readFluCsvData(myListDir[0])

# 删除myListDir中第一个csv的元素
del myListDir[0]

# 遍历文件列表,获取所有数据
for myDir in myListDir:  
    tmp = readFluCsvData(myDir)
    data = pd.concat([data,tmp], ignore_index=True)

# 统一地区名的格式
data.loc[data['地区'] == '黑龙江','地区'] = '黑龙江省'

# 对指定的列进行计数
# data['地区'].value_counts()


people = readYearPeopleData("people.csv")

result = pd.merge(data,people,on=['地区','年份'])
result

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值