''
'''2、np.cumsum()返回一个数组,将像sum()这样的每个元素相加,放到相应位置'''
'''NumPy数组实际上被称为ndarray
NumPy最重要的一个特点是N维数组对象ndarray,它是一系列同类型数据的集合
1、创建数组,将序列传递给numpy的array()函数即可,从现有的数据创建数组,array(深拷贝),asarray(浅拷贝);
或者使用arange()函数先创建一维数组,然后用reshape函数设置维度
创建未初始化的数组,empty(shape,dtype,order)形状,类型,行列优先,col是列,row是行
2、数组的几个重要属性,
ndarray.ndim 秩,即轴的数量或维度的数量。可以在创建数组的时候np.array(ndmin=)设置最小维度
ndarray.shape 数组的维度,对于矩阵,n行m列,不改变原序列
ndarray.size 数组元素总个数,相当于shape中n*m的值,改变原序列
ndarray.itemsize,数组每个元素大小,以字节为单位
ndarray.dtype 数组元素类型
ndarray.nbytes 数组中的所有数据消耗掉的字节数
ndarray.flags 数组对象的内存信息
2.5、矩阵的维度
0维矩阵 A=3.6 A.shape=()
1维矩阵 A=[1,2,3,4] A.shape=(4,)
2维矩阵 A=[[1,2,3,4]] A.shape=(1,4)
3维矩阵 A=[[[1,2],[3,4]],[[5,6],[7,8]]] A.shape=(2,2,2)
3、创建特殊矩阵,
np.ones((3,3)) 创建指定行列的数值为浮点1的矩阵
np.zeros((3,3)) 创建指定行列的数值为浮点0的矩阵
np.identity(n,type) 创建指定阶数指定元素类型的单位矩阵
np.eye(n, M, k, dtype) 创建单位对角矩阵,对角元素为1,其他位置为0.n: 返回矩阵的行数,M: 返回矩阵的列数,默认为 n,k: 对角线的索引,dtype: 数据类型
np.diag([1,2,3]) 创建制定对角元素的单位矩阵
np.empty(shape,dtype,order) 创建未初始化的数组,
创建随机数组,
np.random.random() 创建指定行列的随机矩阵,元素为0到1之间
np.random.rand(10, 10) 创建指定形状(示例为10行10列)的随机数组(范围在0至1之间)
np.random.uniform(0, 100)创建指定范围内的一个数
np.random.randint(0, 100)创建指定范围内的一个整数
np.random.randint(10,size=(3,3))创建指定范围(0,10)指定维度的一个整数
给定均值/标准差/维度的正态分布np.random.normal(1.75, 0.1, (2, 3))
4、索引和查找,
# 花式索引举例:
A[行索引,列索引]
ex: A[:,[0,2]] 奇数行:A[::2, ]
a = np.arange(0, 100, 10)
print(a)
indices = [1, 5, -1]
b = a[indices]
print(b)
# where函数,返回使得条件为真的下标元素的列表
a = np.arange(0, 100, 10)
b = np.where(a < 50)
c = np.where(a >= 50)[0]
print(b)
print(c)
# where函数的三目运算
a = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
b = np.where(a < 80, 0, 90) 小于80,替换为0,大于80,替换为90
print(b)
指定轴求和 np.sum(参数1: 数组; 参数2: axis=0/1,0表示列1表示行)
指定轴最大值np.max(参数1: 数组; 参数2: axis=0/1,0表示列1表示行)
指定轴最小值np.min(参数1: 数组; 参数2: axis=0/1,0表示列1表示行)
行或列最大值索引np.argmax(参数1: 数组; 参数2: axis=0/1,0表示列1表示行)
行或列最小值索引np.argmin(参数1: 数组; 参数2: axis=0/1,0表示列1表示行)
指定轴平均值mean(参数1: 数组; 参数2: axis=0/1,0表示列1表示行)
指定轴方差 std (参数1: 数组; 参数2: axis=0/1,0表示列1表示行)
5、数组与数的运算(包括+-*/,是元素与元素的运算)
矩阵库(Matrix)矩阵的运算(非常重要),
《《《《《《《《《《《《《《《《《《《
行列式求值 np.linalg.det()
计算矩阵的逆 np.linalg.inv()
矩阵乘 np.dot(), a.dot(b)或者np.dot(a,b)
矩阵的转置 np.transpose(arr) 或 ndarray.T
》》》》》》》》》》》》》》》》》》》
矩阵垂直拼接 np.vstack((v1,v2)) vertical 垂直,stack堆叠、累加
矩阵水平拼接 np.hstack((v1,v2)) horizontal 水平的
△ np.c_[] 按列左右连接两个矩阵
△ np.r_[] 按行上下连接两个矩阵
6、NumPy 数组操作
△ n.reshape(arr,newshape,order=)数组,新形状,"C"-按行、"F"-按列、"A"-原顺序、"k"-元素在内存中痴线顺序
△ n.flat()数组元素迭代器。
△ n.transpose()对换数组的维度,矩阵的转置
△ ndarray.T 与上类似,用于矩阵的转置
△ n.concatenate((a1, a2, ...), axis)沿指定轴连接同形数组。a1, a2, ...:相同类型的数组,axis:沿着它连接数组的轴,默认为 0(垂直连接)1(水平连接)
n.flatten(order=)返回一份数组拷贝,对拷贝的修改不影响原数组
n.ravel(a,order=)返回展开数组,修改会影响原数组
n.rollaxis(arr, axis, start)向后滚动指定的轴,arr:数组,axis:要向后滚动的轴,其它轴的相对位置不会改变,start:默认为零,表示完整的滚动。会滚动到特定位置。
n.swapaxes(arr, axis1, axis2)交换数组的两个轴,axis1:对应第一个轴的整数,axis2:对应第二个轴的整数
n.split()分隔数组 ,n.hsplit()水平分割, n.vsplit()垂直分割
数组元素的增删:
n.resize()、n.append()添加到末尾、n.insert()、n.delete()、n.unique()查找唯一元素
7、NumPy 线性代数
△ n.dot() 数组元素的点积,即元素对应相乘
△ n.matmul() 两个数组的矩阵积4
△ n.linalg.det() 求行列式的值
△ n.linalg.inv() 计算矩阵的逆
n.vdot() 两个向量的点积
n.inner() 两个数组的内积
n.determinant() 数组的行列式
n.solve() 求解线性矩阵方程
'''
按索引删除行
data = data.drop([i])
重置索引
data = data.reset_index()
转换数据格式到数字
data = data[["name", "age", "size"]].apply(pd.to_numeric)
新建
import pandas as pd
a = pd.DataFrame([[1,2,3],
[4,5,6],
[7,8,9]],columns = ["feature_1", "feature_2", "label"])
读取
import pandas as pd
df = pd.read_csv("datas/hour.csv", sep=",")
del df["instant"]
df.drop(columns=["instant","dteday"])
暴力
a.columns = ['a','b','c']
较好的方法
a.rename(columns={'A':'a', 'B':'b', 'C':'c'}, inplace = True)
Inplace 是否修改原列名
a.info()
需赋值给序列
df["instant"] = df["instant"].astype("object")
X[['Global_active_power',"b"]] = X[['Global_active_power',"b"]].astype('float64')
a.describe()
a.iloc[:,0:3]
df.iloc[:,[-1]]
a[["feature_1", "feature_2"]]
df.columns返回一个可迭代对象
for i in df.columns:
print(i)
一行
a.iloc[0,:]
一列
a.iloc[:,1]
a["feature_1"]
横向
pd.concat([a,a],axis=1)
纵向
pd.concat([a,a],axis=0)
import pandas as pd
df = pd.DataFrame([[1,2,3],[2,3,4],[1,2,3]])
df.drop_duplicates(inplace=True)
df
#df.int_rate.replace('%','',inplace = True, regex = True)
a.replace('%','',inplace = True, regex = True)
import pandas as pd
a = pd.DataFrame([[1,2,3],
[4,5,6],
[7,8,9]],columns = ["feature_1", "feature_2", "label"])
b = a.copy()
b.drop(columns=["feature_1"],inplace=True)
a
a["feature_1"].value_counts()
删除
a.replace('?', np.nan).dropna(how = 'any')
df = a.sample(frac=0.66)
df = a.sample(n=3)
pd.concat([a,df])
from sklearn.preprocessing import Imputer
im = Imputer()
im.fit_transform(df)
from sklearn.externals import joblib
joblib.dump(enc,'rf.model')
enc2 = joblib.load('rf.model')
b = enc2.transform(a).toarray()
pd.DataFrame(b)
import pandas as pd a = pd.DataFrame([[1, "A", "a"], [0, "B", "bB"], [2, "C", "cC"]]) def f(x): if x[1] not in x[2]: return x else: return pd.Series() a = a.apply(f, axis=1) print(a.dropna())
列合并/扩展:np.column_stack()
行合并/扩展:np.row_stack()
numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵, numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。
import pandas as pd
import numpy as np
path = r"datas\iris.data"
names = ['sepal length', 'sepal width', 'petal length', 'petal width', 'cla']
df = pd.read_csv(path,header=None,names=names)
print(df.shape)
df.drop_duplicates(inplace=True)
print(df.shape)
df.reset_index(inplace=True)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['cla2'] = pd.DataFrame(le.fit_transform(df['cla']))
df
df = df.drop(columns=['cla'])
# df
X = df.iloc[:,:-1]
y = df.iloc[:,-1]
#将代码块分割:点到选中的行Ctrl+Shift+-
#将代码块合并:使用Shift选中需要合并的框,Shift+m
#在代码块前增加新代码块,按a;在代码块后增加新代码块,按b;
#删除代码块,按dd
#运行当前代码块,Ctrl+Enter
#运行当前代码块并选中下一个代码块(没有就创建),Shift+Enter
清除缓存kernel -> restart
Jupyter的优点是允许将变量放到内存中,可以直接进行类型推断