前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Numpy和pandas的使用技巧

Numpy和pandas的使用技巧

作者头像
用户2337871
发布2020-02-13 00:03:21
3.5K0
发布2020-02-13 00:03:21
举报
文章被收录于专栏:gitgit

''

'''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的优点是允许将变量放到内存中,可以直接进行类型推断

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新建dataframe
  • 删除dataframe列
  • 修改dataframe列名
  • 查看dataframe字段信息
  • 修改dataframe列类型
  • 查看dataframe统计信息
  • 获取dataframe部分列(必须使用iloc)
  • 获取dataframe列名
  • 获取dataframe的Series
  • 合并dataframe
  • 数据去重
  • 替换DF中的字符串
  • Dataframe copy
  • 统计Series值出现次数
  • 异常数据处理
  • dataframe采样
  • 填充缺失值
  • Numpy中的矩阵合并
  • numpy.ravel() 与numpy.flatten()
  • Python pandas数据分析中常用方法
    • https://blog.csdn.net/qq_16234613/article/details/64217337
    • 重置索引
    • jupyter notebook 快捷键
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档