{DAY 20} Pandas 学习笔记part.6

前言

这篇文章会进行到更多的资料操作

将会处理 Indexing Values

在标签值的处理很重要

因为标签值最主要就是拿来判读各个栏位的名称

很多时候外部读取进来的栏位名称都会是使用缩写或是代号

再进行资料的分析前必须要先把栏位的名称改成後续方便使用的形式

这个也是相当关键的资料分析前置作业

处理 Indexing Values

index可以自动产生

例如创造一个series,pandas会自动加上从0开始的索引值

也可以自己指定

像是前面有练习过的用dictionary产生一个dataframe,或是利用csv档去读取资料然後指定参数

还有另外一个指定index的方法,是用set_index()

这会指定资料里某一栏的资料变成index

covid_india = pd.read_csv("Latest Covid-19 India Status.csv", index_col=0)
covid_india.head()

现在若是想要将index设为Active Ratio (%),同时保留State/UTs的栏位资料

# 可以先将indexed data设为另外一组column
covid_india["State/UTs"] = covid_india.index
# 接着将index改成Active Ratio (%)
covid_india = covid_india.set_index("Active Ratio (%)")
covid_india.head()

可以看到State/UTs的栏位资料放到了最右边,而index顺利改成Active Ratio (%)

也可以使用.reset_index()

这会删除掉原先设定好的index,并且将原本index的数值放到另外一列column

covid_india = covid_india.reset_index()
covid_india.head()

可以看到Active Ratio (%)往右边移动,而index则是自动产生从零开始的default value

现在换一个资料档案试试看

使用的是kaggle上美国的police shooting资料档案

US Police Shootings

police_shooting = pd.read_csv("shootings.csv", index_col=0)
police_shooting.head()

当我们想要试着看manner_of_death类别里有多少种时

会使用到.unique()

police_shooting["manner_of_death"].unique()
'''
array(['shot', 'shot and Tasered'], dtype=object)
'''

可以发现只有两个值'shot' & 'shot and Tasered'

若是只想要找出shot的资料

police_shooting = police_shooting[police_shooting["manner_of_death"] == "shot"]
police_shooting.head()

当我们想要的栏位只有特定几个,可以使用list来留存

columns_to_keep = ["name","date","manner_of_death","armed","age","gender","race","city","state"]
police_shooting = police_shooting[columns_to_keep]
police_shooting.head()

若是我们想要让index变成state和city的结合,可以利用list设定index

police_shooting = police_shooting.set_index(["state",'city'])
police_shooting.head(10)

现在若是想要将name的first name和 last name拆成两个column

可以使用.apply()

将arbitrary function放进去并且应用在Series or Dataframe里面的rows或是columns

先建立一个function

再apply到police_shooting的资料里

def splitname(row):
    row["First"] = row["name"].split(" ")[0]
    row["Last"] = row["name"].split(" ")[-1]
    return row

police_shooting = police_shooting.apply(splitname, axis="columns")
police_shooting.head()

可以看到顺利的新增了First&Last的两个栏位


<<:  【第十八天 - Flutter Cloud Messaging(下)】

>>:  Day18 使用 GCP 免费云端主机测试 Turn server

Day16 Grafana (Match Making)

昨天我们安装了 Prometheus 与 Grafana ,来协助我们观察 Open-Match 的...

Electron/Nginx/NodeJS/MongoDB开发HIS之架构概述

前言 今年已经2021相信不少人都已经听说过electron了 小弟技术不才,希望可以给台湾医疗资讯...

Proxmox VE 客体机线上迁移

当 Proxmox VE 丛集建立完成以後,除了方便的多节点单一介面管理的好处之外,最令人开心的就...

Day30 vue.js docker部署

延续昨日 今天的要做是把东西布署在docker(就不解释docker罗) 首先要先创一个docker...

[Day 12] Create新增资料

在终端机执行php artisan route:list可以得到 执行create使用GET Met...