Numpy和pandas的使用技巧

与世无争的帅哥 提交于 2020-02-27 10:27:33

''

'''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)  

 

新建dataframe

新建

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=",")

 

删除dataframe列

del df["instant"]

 

df.drop(columns=["instant","dteday"])

 

修改dataframe列名

暴力

a.columns = ['a','b','c']

 

较好的方法

a.rename(columns={'A':'a', 'B':'b', 'C':'c'}, inplace = True)

Inplace 是否修改原列名

查看dataframe字段信息

a.info()

 

修改dataframe列类型

需赋值给序列

df["instant"] = df["instant"].astype("object")

X[['Global_active_power',"b"]] = X[['Global_active_power',"b"]].astype('float64')

查看dataframe统计信息

a.describe()

 

获取dataframe部分列(必须使用iloc

a.iloc[:,0:3]

df.iloc[:,[-1]]

a[["feature_1", "feature_2"]]

 

获取dataframe列名

df.columns返回一个可迭代对象

for i in df.columns:

    print(i)

获取dataframe的Series

一行

a.iloc[0,:]

 

一列

a.iloc[:,1]

a["feature_1"]

 

合并dataframe

横向

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中的字符串

#df.int_rate.replace('%','',inplace = True, regex = True)

a.replace('%','',inplace = True, regex = True)

Dataframe copy

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

统计Series值出现次数

a["feature_1"].value_counts()

 

异常数据处理

删除

a.replace('?', np.nan).dropna(how = 'any')

 

 

 

 

dataframe采样

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())

 

 

 

Numpy中的矩阵合并

列合并/扩展:np.column_stack()

行合并/扩展:np.row_stack()

 

numpy.ravel() 与numpy.flatten()

numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵, 
numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。

Python pandas数据分析中常用方法

 

https://blog.csdn.net/qq_16234613/article/details/64217337

 

重置索引

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]

 

 

 

 

jupyter notebook 快捷键

#将代码块分割:点到选中的行Ctrl+Shift+-

#将代码块合并:使用Shift选中需要合并的框,Shift+m

#在代码块前增加新代码块,按a;在代码块后增加新代码块,按b;

#删除代码块,按dd

#运行当前代码块,Ctrl+Enter

#运行当前代码块并选中下一个代码块(没有就创建),Shift+Enter

清除缓存kernel -> restart

Jupyter的优点是允许将变量放到内存中,可以直接进行类型推断

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!