个人主页:在线OJ的阿川
大佬的支持和鼓励,将是我成长路上最大的动力
阿川水平有限,如有错误,欢迎大佬指正
承接上篇的博客
数据分析—技术栈和开发环境搭建
Python初阶
Python–语言基础与由来介绍
Python–注意事项
Python–语句与众所周知
目录
- Numpy
- 数组类
- 具体操作
- Pandas
- 基本类
- Series类
- 具体操作
- DataFrame类
数据分析最常用的两个库为Numpy和Pandas
用的编辑器为Jupyter notebook
接下来的代码将基于该编辑器中实现
Numpy
- 首先先在cmd(命令提示符)当中安装该库
- 要使用该库,还要在jupyter notebook导入该库
数组类
- .array()方法 创建数组
- .ndim 方法 查看数组维数
- .shape 方法 以元组的形式查看数组几维几元素
- .size 方法 查看数组元素总个数
- .dtype 方法 查看数组元素类型
- .zeros(n) 方法 创建n个为0的数组
- .ones(n)方法 创建n个为1的数组
- n为任意数字
- 数组元素类型为浮点型
- .arange( n,n , n)方法 创建以n到n,左闭右开,步长为n的数组
- .concatenate()方法 将多个数组连接一起,并不改变各个数组
- .sort()方法 对数组进行排序
- [索引 ] 数组可以通过索引进行查找
- [ n:n ] 数组可以通过切片进行查找
- n表示任意数字
- 数组 + 数组 数组相加,表示拼接数组
- 数组 * n 表示利用数组的广播机制,对数组每个元素都乘以n
- 广播机制
- .max()方法 表示数组的最大元素
- .min()方法 表示数组的最小元素
- .sum()方法 表示数组元素总和
- .mean()方法 表示数组元素的平均值
- 数组[ () I或者& ()] 表示数组中加条件
具体操作
具体操作的图:
如果你想练习以上方法,这里有些题:
答案是
import numpy as np
arr1 =np.array([6, 2, -7, 2, 8, -2, 1])
arr1
arr2 = np.array([[1, 3, 5], [2, 4, 6]])
arr2
print(arr1.ndim)
print(arr2.ndim)
print(arr1.shape)
print(arr2.shape)
print(arr1.size)
print(arr2.size)
print(arr1.dtype)
print(arr2.dtype)
arr3 = np.zeros(6)
arr3
arr4 = np.ones(5)
arr4
arr5 = np.arange(10, 21, 2)
arr5
import numpy as np
arr1 = np.array([1, 3, 2, 4, 9])
arr1
arr2 = np.ones(5)
arr2
arr3 = np.zeros(5)
arr3
arr_sum = np.concatenate([arr1, arr2, arr3])
arr_sum
arr1.sort()
arr1
print(arr1[2])
print(arr1[-3])
print(arr1[1:4])
arr1 + arr2
arr1 * 5
print(arr1.max())
print(arr1.min())
print(arr1.sum())
print(arr1.mean())
arr1[(arr1 < 1) | (arr1 > 3)]
Pandas
Pandas库中有两个最重要的方法
- .Series()
- .DataFrame()
基本类
- .iloc[ ] 以位置索引查找数组元素,位置索引从零开始,可以与切片搭配使用
- .loc[ ]以标签索引查找数组元素,可以与切片搭配使用
- [()|或者d ()] 条件选择数组元素
- .add()方法 将两个数组相加,且参数中可以加缺失值
- 若不写缺失值 则两个数组默认相同索引相加 如果没有相同索引则会报错
- .describe()方法 打印统计信息
- 元素数量count
- 元素平均值mean
- 元素标准差std
- 元素前1/4(25%)
- 元素前2/4(50%)
- 元素前3/4(75%)
- 元素最大值max
- 元素类型dtype
- .apply Python中的高阶函数 可以包含其他函数
- .index 展示索引
- .columns 展示维度
- .T 表示对数组转置
- .head(n)表示展示数组中的前面n行
- .drop([“标签索引” ],axis=0或者1) 表示删除针对于某行或者某列的该标签索引的数据
- axis=0 表示行(实际操作是列)
- axis=1 表示列(实际操作是行)
- lambda关键词 这是Python当中的关键词与apply()搭配使用,可以实现具体的函数
- applymap(普通函数) 表示将数组中的每个元素放入普通函数中
Series类
- .Series([ ]) 创建一维表格且索引默认为零开始
- .Series([ ],index = [ ])创建表格且指定索引
- .Series({ })创建字典类型表格
具体操作
具体操作的图
如果你想练习以上方法,这里有些题:
答案是:
import pandas as pd
s1 = pd.Series([-1.2, 3.7, 2.5, -8.2, 6.3])
s1
s2 = pd.Series([1, 2, 3, 4, 5], index=[5, 4, 3, 2, 1])
s2
print(s2.iloc[1])
s2.loc[5:3]
s3 = pd.Series({"小李":82, "小陈":93, "小张":91, "小曾":78, "小邓":68})
s3
s3.loc["小张"] = 95
s3
s3[(s3 > 80) & (s3 < 90)]
import pandas as pd
s1 = pd.Series([92, 67, 70, 88, 76], index = ["小明", "小红", "小杰", "小丽", "小华"])
s1
s2 = pd.Series([95, 85, 60, 79, 76], index = ["小明", "小杰", "小宇", "小娟", "小彤"])
s2
s1.add(s2, fill_value = 0)
s1.describe()
s1 = s1 + 5
s1
def get_grade_from_score(score):
if score > 90:
return "A"
elif score > 80:
return "B"
elif score > 70:
return "C"
elif score > 60:
return "D"
else:
return "不及格"
s1.apply(get_grade_from_score)
DataFrame类
- .DataFrame()创建二维表格,默认标签为列标签
- 这里的二维是指两个维度
- 分别为列维度和行维度
- 是列标签和行标签
- 分别为列维度和行维度
- 这里的二维是指两个维度
- .DataFrame[" 列标签"] 表示以该列标签索引查找表格元素
- .DataFrame[“列标签”:“列标签”] 表示以多个该列标签索引搜索数据
- DataFrame.loc[ “行标签”,“列标签”] 表示以该行标签和列标签索引搜索数据
- Series+DataFrame 可以相加,但要注意标签索引要相对应
- DataFrame +n 表示当中元素数据+n
- n表示任意数字
如果你想练习以上方法,这里有些题:
答案是
import pandas as pd
name = pd.Series(["小陈", "小李", "小王", "小张", "小赵", "小周"], index=[1, 2, 3, 4, 5, 6])
gender = pd.Series(["女", "女", "男", "男", "女", "男"], index=[6, 5, 4, 3, 2, 1])
height = pd.Series([172.5, 168.0, 178.2, 181.3, 161.7], index=[1, 2, 3, 4, 5])
students = pd.DataFrame({"姓名":name, "性别":gender, "身高":height})
students
print(students.index)
print(students.columns)
students.T
students["身高"]
students[["性别", "身高"]]
students.loc["3":"5"]
students.loc["3":"5", "姓名":"身高"]
students.loc["3":"5", : ]
students[(students["身高"] > 165) & (students["性别"] == "女")]
students.head(5)
import pandas as pd
students = {"1":{"姓名" :"小陈", "考试1":85, "考试2":95, "考试3":92}, "2":{"姓名":"小李", "考试1":91, "考试2":92, "考试3":94}, "3":{"姓名":"小王", "考试1":86, "考试2":81, "考试3":89}, "4":{"姓名":"小张", "考试1":79, "考试2":89, "考试3":95}, "5":{"姓名":"小赵", "考试1":96, "考试2":91, "考试3":91}, "6":{"姓名":"小周", "考试1":81, "考试2":89, "考试3":92}}
students = pd.DataFrame(students).T
students
students["考试4"] = [72, 69, 79, 83, 82, 76]
students
students.loc["7"] = {"姓名":"小杨", "考试1":79, "考试2":82, "考试3":81, "考试4":69}
students
students.drop(["6", "7"], axis = 0)
students.drop(["考试2", "考试4"], axis = 1)
bonus = pd.Series({"考试1":2, "考试2":3, "考试3":2, "考试4":5})
bonus
bonus + students[["考试1", "考试2", "考试3", "考试4"]]
students["考试4"] = students["考试4"] + 10
students
import pandas as pd
import numpy as np
students = {"1":{"姓名" :"小陈", "考试1":85, "考试2":95, "考试3":92}, "2":{"姓名":"小李", "考试1":91, "考试2":92, "考试3":94}, "3":{"姓名":"小王", "考试1":86, "考试2":81, "考试3":89}, "4":{"姓名":"小张", "考试1":79, "考试2":89, "考试3":95}, "5":{"姓名":"小赵", "考试1":96, "考试2":91, "考试3":91}, "6":{"姓名":"小周", "考试1":81, "考试2":89, "考试3":92}}
students = pd.DataFrame(students).T
students
score_average = students.loc[ : , "考试1":"考试3"].mean(axis = 1)
name = students["姓名"]
students_average = pd.DataFrame({"姓名":name, "平均分":score_average})
students_average
students.loc[ : , "考试1":"考试3"].apply(lambda x: np.sort(x)[-2])
def grade_from_score(score):
if score >= 95:
return "A+"
elif score >= 90:
return "A"
elif score >= 85:
return "B+"
elif score >= 80:
return "B"
elif score >= 75:
return "C+"
else:
return "C"
students.loc[ : , "考试1":"考试3"].applymap(grade_from_score)
students["考试1"] = students["考试1"].astype("int")
students["考试2"] = students["考试2"].astype("int")
students["考试3"] = students["考试3"].astype("int")
students.describe()
请踏实的走好每一步路,一定会变得更强
好的,到此为止啦,祝您变得更强
道阻且长 行则将至 |
---|
个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力