这篇文章会进行到更多的资料操作
将会分成两个部分:
首先在一大笔资料未必每个资料都会使用到
所以如何透过条件筛选出符合特定条件的资料
是进行资料分析最基本的操作
因为筛选资料的语法会根据使用情境的不同而有各式各样的对应语法
在这篇文章会使用到最基本的布林值操作还有比较运算元
使用上如果需要更多的应用可以去stakeoverflow上找
因为比起用堆叠布林运算元跟比较运算元
pandas身为专门用来资料处理的工具
可能会有更为简便的操作语法
会继续利用kaggle上的开源资料进行更多的pandas练习
Kaggle: Your Machine Learning and Data Science Community
看的课程还是Coursera上的 Introduction to Data Science in Python
Coursera | Online Courses & Credentials From Top Educators. Join for Free | Coursera
练习是利用上述课程里教的搭配以前在学校学过的知识
整里并且搭配实际的资料档
整理出来的笔记
大多数的时候当我们想要进行资料分析
会需要连结到外部的资料库
而外部资料的档案多使用的形式为.csv档
csv档为常见的资料储存格式
每个资料之间利用逗号隔开
在使用python时
处理这种资料会需要蛮繁复的手续
读进来後要先处理逗号
并且处理栏跟列的名称
但是在pandas套件里有强大的dataframe处理功能
可以用简单的pd.read_csv( )
直接将csv档读取并且排列成易读性高dataframe
让资料的分析更为快速简便
现在利用kaggle上电信公司的顾客资讯来实际练习
将外部的csv档读进来进行
进行接续更多的资料操作练习
这里使用的是"Telo Customer Churn"的档案
是一笔有关电信公司的顾客资料
首先先将csv档案读进来
利用pd.read_csv( )
import pandas as pd
df = pd.read_csv("WA_Fn-UseC_-Telco-Customer-Churn.csv")
df.head()
这是输出的部分截图
可以看到row的index是default的从0开始的数据
若是我们想要将index设为customerID
可以再把档案读进来的时候,增加一个index=" "
的参数
df = pd.read_csv("WA_Fn-UseC_-Telco-Customer-Churn.csv", index_col = 0)
df.head()
可以看到index换成了ciustomerID
很多时候会需要更改column的名称
让资料的易读性提高
若是我们想要让column的名称全部都用小写表示
# 首先先让column的名称变成list
cols = list(df.columns)
# 接下来让他们全部变成小写lower(),为了避免空格的问题,可以使用strip()
cols = [x.lower().strip() for x in cols]
# 复制一个资料表
copy_df = df.copy()
# 让新的list取代原本的栏位名称
copy_df.columns = cols
copy_df.head()
可以看到column的名称全部变成小写
资料是延续上篇文章使用到的
用的是"Telo Customer Churn"的档案
一笔有关电信公司的顾客资料
先来回顾一下这笔资料长怎样
df.head()
在上篇学会了基本的资料查询语法
这里要学着用布林遮罩来选取符合特定条件的资料
假如现在想找出顾客里是女生的资料
female = df["gender"] == "Female"
female
'''
customerID
7590-VHVEG True
5575-GNVDE False
3668-QPYBK False
7795-CFOCW False
9237-HQITU True
...
6840-RESVB False
2234-XADUH True
4801-JZAZL True
8361-LTMKD False
3186-AJIEK False
Name: gender, Length: 7043, dtype: bool
'''
可以看到回传的资料会用True,False的布林值表示
若是想要在回传的资料表里隐藏False的数值,可以使用.where()
df.where(female).head()
可以看到有False的栏位(所有性别是Male的)都变成NaN
若是想要只输出留下Yes的资料,可以用到.dropna( )
df.where(female).dropna().head()
可以从gender栏位看到剩下的都是Female的资料
在pandas里有更为简便的手法取出符合特定条件的资料,可以使用[indexing operator]即可
df[df["gender"]=="Female"].head()
可以很简洁地得到性别为女生的资料
当我们想找MonthlyCharges介於50到100有哪些人
可以利用比较元进行运算
先产生出一个由布林值构成的 series
filter = (df["MonthlyCharges"] > 50) & (df["MonthlyCharges"]<100) # 记得要用括号
filter
'''
customerID
7590-VHVEG False
5575-GNVDE True
3668-QPYBK True
7795-CFOCW False
9237-HQITU True
...
6840-RESVB True
2234-XADUH False
4801-JZAZL False
8361-LTMKD True
3186-AJIEK False
Name: MonthlyCharges, Length: 7043, dtype: bool
'''
使用 built-in function的方法
.gt()
表示greater than
.lt()
表示lower than
df["MonthlyCharges"].gt(50) & df["MonthlyCharges"].lt(100)
'''
customerID
7590-VHVEG False
5575-GNVDE True
3668-QPYBK True
7795-CFOCW False
9237-HQITU True
...
6840-RESVB True
2234-XADUH False
4801-JZAZL False
8361-LTMKD True
3186-AJIEK False
Name: MonthlyCharges, Length: 7043, dtype: bool
'''
由於这是built-in在Series和DataFrame的,所以可以利用chain连接一起使用
df["MonthlyCharges"].gt(50).lt(100)
'''
customerID
7590-VHVEG False
5575-GNVDE True
3668-QPYBK True
7795-CFOCW False
9237-HQITU True
...
6840-RESVB True
2234-XADUH False
4801-JZAZL False
8361-LTMKD True
3186-AJIEK False
Name: MonthlyCharges, Length: 7043, dtype: bool
'''
这篇文章练习到如何筛选资料
可以看到搭配实际资料档案应用後的效果
在筛选资料时要注意到括号的使用
像是(df["MonthlyCharges"] > 50) & (df["MonthlyCharges"]<100)
如果两个条件没有用括号匡起来
变成这样df["MonthlyCharges"] > 50 & df["MonthlyCharges"]<100
会无法成功运作kernel而跑不出想要的答案
也要记得同样的处理方式
若是有更简便的语法可以使用
可以针对易读性下去判断是否要使用
>>: [Day 17] v-model双向绑定是什麽咧??
了解旋转、圆形与极座标的概念 如何利用弦波函数产生韵律感 利用噪声产生连续的乱数 如何使用噪声产生...
引言 今天是机派X系列文章的第十一天。 昨天很寒酸的简介无人机,今天会从单一零件的角度一一将无人机的...
今天的内容为该如何简单制作出一个自动攻击的敌人 ...
先宣传一下我的新书,终於出来惹,感动到无法言语>"< 还请大家多多支持! We...
媒体协商 上一篇提到,要进行 WebRTC的连线需要处理以下两个问题,今天我们就来看看媒体协商的部分...