前言
建议使用Jupyter Notebook编辑器。好用,无需多言。
如果需要修改Jupyter Notebook的默认文件夹位置,这里有一个网址可能会很有帮助。
jupyter notebook的默认文件夹位置_jupyter notebook目录在哪-CSDN博客
Numpy入门-数组
安装numpy
如果没有安装Numpy库,需要先在控制台上通过命令pip install numpy来安装。
安装完成后,通过如下代码即可导入该库。
import numpy as np
该代码表示导入Numpy库并为其命名一个别名为np。
使用array构造函数创建数组
import numpy as np #创建一维数组 arr1 = np.array([1, 2, 3]) #创建二维数组 arr2 = np.array([[1, 2, 3], [4, 5, 6]])
同理,多维数组创建依次嵌套即可。需要注意的是,如果数组内元素为不同类型,那么它们会被强制转换为同一类型。
温馨提示:之后的代码都会默认有import numpy as np这句代码,就不重复写了。
使用其他方法创建数组
#创建元素全部为0的数组 arr1 = np.zeros(大小) #创建元素全部为1的数组,不过元素类型为float64类型(32位机器上可能是float32) arr2 = np.ones(大小) #创建元素为数字序列的数组 arr3 = np.arange(起始值, 结束值, 步长) #结束值不包含在范围内
数组的一些属性
属性 | 值 |
ndim | 数组的维度 |
shape | 一个元组,表示各个维度元素的个数 |
size | 数组元素的总个数 |
dtype | 数组元素的类型 |
数组的一些方法
函数/方法 | 用法 | 返回值 | 是否改变原值 |
concatenate(函数) | np.concatenate((数组1,数组2,…)) np.concatenate([数组1,数组2,…]) | 返回一个连接了数组1、数组2、…的数组 | 否 |
sort(函数) | np.sort(数组) | 返回排序好的数组 | 否 |
sort(数组方法) | 数组.sort() | None | 是 |
max(数组方法) | 数组.max() | 数组中最大值 | 否 |
min(数组方法) | 数组.min() | 数组中最小值 | 否 |
sum(数组方法) | 数组.sum() | 数组所有元素之和 | 否 |
mean(数组方法) | 数组.mean() | 数组所有元素平均值 | 否 |
数组的索引
数组索引可以为负数,负数就是倒着的顺序。
可以通过索引,使用切片。如arr1[开始值:结束值]表示arr1中索引从开始值到结束值-1的元素,arr[:]表示所有元素。
数组索引可以是布尔值数组,可以达到根据条件筛选数组元素,例子如下:
假如有一个arr数组,对于arr > 6这个表达式则会产生一个布尔值数组,里面的元素为arr数组中对应位置的元素是否大于6的布尔值。
则对于arr[arr > 6]则会把相应位置为True的元素筛选出来。
当然这里还可以结合逻辑运算进行更复杂的筛选,如arr[(arr > 6) & (arr < 10)]。
数组的一些运算
数组之间的加、减、乘、除都是对应元素之间的相加、相减、相乘、相除
数组与单个数字进行的运算,会使数组上每一个元素与该数字进行对应运算。(广播机制)
Pandas入门-Series
安装pandas
同理,如果没有安装Pandas库,需要先在控制台上通过命令pip install pandas来安装。
安装完成后,通过如下代码即可导入该库。
import pandas as pd
温馨提示:之后的代码都会默认有import pandas as pd这句代码,就不重复写了。
使用Series构造函数创建Series
#创建Series一般方法 s1 = pd.Series([55, 66, 3, 77, 35]) #创建Series时指定自定义索引 s2 = pd.Series([1, 2, 3], index=["a", "b", "c"]) #传入字典创建Series,字典的键会自动变为索引,值变为对应值 s3 = pd.Series({"a":1, "b":2, "c":3})
Series的一些属性
属性 | 值 |
values | Series的所有元素 |
index | Series的所有索引 |
str | 一个包含很多字符串操作的StringMethods类是咧 |
Series的索引
Series也有索引和切片操作,与数组基本一致。
不过Series的索引可以自定义。自定义的索引叫做标签索引,原本的索引叫做位置索引。
提醒:
- 用标签索引切片是包含结束值的。
- 当标签索引与位置索引都为数字时,索引取值时安装标签索引取值,而切片时按照位置索引切片。
- 查看标签是否存在可以用”标签 in Series”来查看。
Series中关于索引的常用属性
属性名 | 用法 | 索引类型 |
loc | Series.loc[“003”] Series.loc[“001”:“003”] | 标签索引 |
iloc | Series.iloc[3] Series.iloc[1:3] | 位置索引 |
这两个属性是用来便于区分是使用的标签索引还是位置索引的。
Series索引也可以是布尔值数组,可以达到根据条件筛选Series元素。使用方法与数组一样。
Series的一些运算
Series的运算和数组差不多。不过是Series会自动让参与运算的Series中拥有相同索引的值进行运算,如果出现一个索引在其他Series里没有相同索引的情况,运算后的Series会给这个索引赋值为NaN。
如果不想出现有NaN的情况,可以使用Series的一个方法add,如下段代码:
s1.add(s2, fill_Value=0)
给add方法的参数fill_value传一个值,这样对于其他Series中没有的索引所对应的值,会自动赋值为这个值,然后进行加法运算时就不会出现NaN了。
当然还有sub、mul、div方法分别对应减、乘、除。
这些方法不会改变原Series,而是返回一个新的Series。
Series的其他常用方法
方法 | 用法 | 返回值 | 是否改变原值 |
max | Series.max() | Series中最大值 | 否 |
min | Series.min() | Series中最小值 | 否 |
sum | Series.sum() | Series所有元素的值之和 | 否 |
mean | Series.mean() | Series所有元素的值的平均值 | 否 |
describe | Series.describe() | 关于Series的统计信息 | 否 |
apply | Series.apply(callback) | Series中每个元素经过callback函数操作后组成的新Series | 否 |
isnull | Series.isnull() | Series中对应元素是否为空的布尔值组成的Series | 否 |
duplicated | Series.duplicated | Series中对应元素是否与之前的元素重复的布尔值组成的Series | 否 |
value_counts | Series.value_counts | Series中相同元素的出现个数组成的Series | 否 |
sort_values | Series.sort_values | 将Series中元素排序后组成的新Series | 否 |
Pandas入门-DataFrame
DataFrame在Series的基础上添加了列名,可以看成由Series组成的字典,列名是键,值是一个Series。
使用DataFrame构造函数创建DataFrame
#创建DataFrame一般方法,默认索引为数字 s_id = pd.Series(["01", "02", "03"]) s_name = pd.Series(["虎哥", "刀哥", "小亮"]) df1 = pd.DataFrame({"Id":s_id, "名字":s_name}) #创建有标签索引的DataFrame方法1 s_id = pd.Series(["01", "02", "03"], index=["虎哥", "刀哥", "小亮"]) s_hp = pd.Series([200, 100, 50], index=["虎哥", "刀哥", "小亮"]) df2 = pd.DataFrame({"Id":s_id, "血量":s_hp}) #创建有标签索引的DataFrame方法2 s_id = pd.Series({"虎哥":"01", "刀哥":"02", "小亮":"03"}) s_hp = pd.Series({"虎哥":200, "刀哥":100, "小亮":50}) df2 = pd.DataFrame({"Id":s_id, "血量":s_hp}) #创建有标签索引的DataFrame方法3 df4 = pd.DataFrame({"Id":{"虎哥":"01" ,"刀哥":"02", "小亮":"03"}, "血量":{"虎哥":200 ,"刀哥":100, "小亮":50}})
DataFrame的一些属性
属性 | 值 | 类型 |
columns | DataFrame的所有列名 | Pandas的Index类 |
index | DataFrame的所有索引 | Pandas的Index类 |
values | DataFrame的所有值 | Numpy的ndarray类 |
T | DataFrame的转置 | Pandas的DataFrame类 |
提取DataFrame的列的操作
操作 | 返回类型 |
DataFame[列名] | Pandas的Series类 |
DataFrame.列名 | Pandas的Series类 |
DataFrame.[列名列表] | Pandas的DataFrame类 |
如果列名中包含空格或其他空白字符,则只能用第一种或第三种操作。
提取DataFrame的行的属性
属性名 | 用法 | 索引类型 |
loc | DataFrame.loc[“虎哥”] | 标签索引 |
iloc | DataFrame.iloc[0] | 位置索引 |
要获取多行数据就使用切片或列表,如:DataFrame.loc[“虎哥”:”小亮”],DataFrame.iloc[1:3]或DataFrame.loc[[“虎哥”, “小亮”]],DataFrame.iloc[[3, 1]]等。
温馨提示:标签索引同样包含结束值。
提取DataFrame的单个元素
DataFrame.loc[行名, 列名]或DataFrame.iloc[行序号, 列序号]。
提取DataFrame的部分
DataFrame.loc[行名1:行名2, 列名1:列名2]或DataFrame.iloc[行序号1:行序号2, 列序号1:列序号2]。
筛选符合条件的DataFrame行
如:df[df[列名] > 60]或者df[df.列名 > 60]
跟数组条件筛选一样,只不过是根据列筛选行。也可以进行复杂条件筛选。
获取DataFrame的前/后N行的方法
方法名 | 用法 | 返回值 | 是否修改原值 |
head | DataFrame.head() DataFrame.head(N) | DataFrame的前5行 DataFrame的前N行 | 否 |
tail | DataFrame.tail() DataFrame.tail(N) | DataFrame的后5行 DataFrame的后N行 | 否 |
更新DataFrame的一列值
1. DataFrame[列名] = Series
2. DataFrame[列名] = pd.Series([值1, 值2, …], index=[索引1, 索引2, …])
3. DataFrame[列名] = [值1, 值2, …]
需要的注意的是如果DataFrame中有标签索引,则要指定对应的索引或者用列表赋值,也就是第2或第3种操作来更新值,否则会产生缺失值。
需要注意的是,列表赋值时是按对应顺序为DataFrame该列赋值,而且需要列表长度与DataFrame的索引长度一致。
如果我们指定的列名在DataFrame里不存在,DataFrame会自动根据这个列名创建一个新的列,值为我们所赋的值。
更新DataFrame的一行值
与更新列值一样,不过是改成使用loc和iloc属性而已。
需要注意的是,如果行不存在的话用loc可以做到添加行的效果,而iloc不行,且会报错。
删除DataFrame的行或列的方法
方法 | 用法 | 返回值 | 是否修改原值 |
drop | DataFrame.drop([标签索引1, 标签索引2, …]) | 返回被删除对应行的DataFrame | 否 |
drop | DataFrame.drop([列名1, 列名2, …], axis=1) | 返回被删除对应列的DataFrame | 否 |
DataFrame的一些运算
DataFrame的运算和Series一样。
需要注意的是,当所有参与运算的DataFrame都没有(对应行, 对应列)位置的元素时,就算传入前面代码中的fill_value参数,也会出现NaN值。
DataFrame的其他常用方法
方法 | 用法 | 返回值 | 是否改变原值 |
max | DataFrame.max() DataFrame.max(axis=1) | DataFrame各列最大值 DataFrame各行最大值 | 否 |
min | DataFrame.min() DataFrame.min(axis=1) | DataFrame各列最小值 DataFrame各行最小值 | 否 |
sum | DataFrame.sum() DataFrame.sum(axis=1) | DataFrame各列所有元素值之和 DataFrame各行所有元素值之和 | 否 |
mean | DataFrame.mean() DataFrame.mean(axis=1) | DataFrame各列所有元素平均值 DataFrame各行所有元素平均值 | 否 |
describe | DataFrame.describe() | 关于DataFrame各列的统计信息 | 否 |
info | DataFrame.info() | 关于DataFrame的概况 | 否 |
sample | DataFrame.sample(n) | 从DataFrame里随机抽取的n行数据 | 否 |
apply | DataFrame.apply(callback) DataFrame.apply(callback, axis = 1) | DataFrame中每列经过callback函数操作后组成的新DataFrame DataFrame中每行经过callback函数操作后组成的新DataFrame | 否 |
applymap | DataFrame.applymap(callback) | DataFrame中每个元素经过callback函数操作后组成的新DataFrame | 否 |
isnull | DataFrame.isnull() | DataFrame中对应元素是否为空的布尔值组成的DataFrame | 否 |
duplicate | DataFrame.duplicate | DataFrame中对应行是否与之前行重复的布尔值组成的DataFrame | 否 |
duplicate方法的一些其他参数:
参数 | 赋值 | 作用 |
subset | [列名,1 列名2, …] | 只有当subset内指定的列值相同时,才会判断为重复 |