Numpy

  Numpy基本数据结构

  np.array()函数接受一个多维list,返回对应纬度的矩阵

  vector = np.array([1, 2, 3, 4])

  matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

  特殊矩阵:

  np.zeros((第一维size, 第二维size, ...)) 初始化全零矩阵,要求传入的是一个元组,存储各个维度上的尺寸.

  np.ones((第一维size, 第二维size, ...)) 初始化全一矩阵,要求传入的是一个元组,存储各个维度上的尺寸.

  np.arange(起点, 终点, 步长) 创建一个序列

  np.eye(size) 创建一个size*size的单位矩阵

  np.linspace(起点, 终点, 数列长度) 返回一个从起点到终点线性插值的长度为数列长度序列

  np.logspace(起点指数, 终点指数, 数列长度, base=底数) 返回从 底数起点指数 到底数终点指数的长度为数列长度的等比序列

  Numpy基本操作和属性

  一个矩阵中存储的数据类型应该相同,其dtype属性返回矩阵中元素的数据类型

  使用astype(类型)方法安全地改变元素的数据类型.

  vector = numpy.array(["1", "2", "3", "4"]) # ['1' '2' '3' '4']

  vector = vector.astype(float) # [1. 2. 3. 4.]

  矩阵对象的shape属性返回其各维度上的尺寸.

  使用reshape((第一维size, 第二维size, ...)) 方法更改重整数组的形状,若传入某维度上的size为-1,则根据其他维度的尺寸反推此维度的尺寸

  matrix = np.arange(6).reshape(-1, 3) # 得到 [[0 1 2] [3 4 5]]

  使用ravel()方法将高维矩阵拉伸成一维向量

  matrix = np.arange(6).reshape(-1, 3)

  matrix = matrix.ravel() # 得到 [0 1 2 3 4 5]

  Numpy矩阵支持下标索引与切片,与python的list类似

  matrix = numpy.array([[5,10,15], [20,25,30], [35,40,45]])

  matrix[:,1] # 得到[10 25 40]

  matrix[:,0:2] # 得到[[5 10] [20 25] [35 40]]

  matrix[1:3,:2] # 得到 [[20 25] [35 40]]

  Numpy矩阵的reshape()和切片并不返回新矩阵,只是更改了原矩阵的一个视图(view),对新视图进行的修改也会作用在原视图上

  Numpy矩阵支持比较运算符, 返回一个与原矩阵尺寸相同的bool矩阵,存储对对应为进行判断的结果

  print(matrix == 10) # 得到 [[False True False] [False False False] [False False False]]

  print(matrix > 10) # 得到 [[False False True] [ True True True] [ True True True]]

  与MATLAB类似,可以用矩阵比较运算的结果来索引矩阵

  matrix[matrix>10]=10 # 得到 [[ 5 10 10] [10 10 10] [10 10 10]]

  使用min(axis=维度), max(axis=维度), sum(axis=维度) 分别返回数组在某维度上的最小值,最大值和求和

  matrix = np.arange(9).reshape((3, 3))

  matrix.min(axis=1) # array([0, 3, 6])

  matrix.max(axis=1) # array([2, 5, 8])

  matrix.sum(axis=1) # array([3, 12, 21])

  排序

  numpy.sort(矩阵, axis=维度)返回对矩阵对应维度进行排序后的矩阵,注意返回的是一个新矩阵,而原矩阵不改变

  numpy.argsort(矩阵, axis=维度)返回排序后矩阵每个位置的元素在原矩阵中的对应索引.

  Numpy矩阵运算

  加减法:

  相同维度矩阵加减,对应位置元素相加减

  a1 = np.array([20,30,40,50]) # 得到 [20 30 40 50]

  a2 = np.arange(4) # 得到 [0 1 2 3]

  a3 = a1 - a2 # 得到 [20 29 38 47]

  矩阵加减某个标量,则对每个元素都加减这个标量

  a1 = np.array([20,30,40,50]) # 得到 [20 30 40 50]

  a2 = a1-1 # 得到 [19 29 39 49]

  矩阵乘法:

  相同维度矩阵使用*运算符,返回尺寸相同的新矩阵,其存储的是对应位置元素相乘结果

  使用矩阵1.dot(矩阵1)或np.dot(矩阵1,矩阵2)计算矩阵点乘

  A = np.array([[1,1],[0,1]])

  B = np.array([[2,0],[3,4]])

  # 矩阵对应位置相乘

  print(A*B) # 得到 [[2 0] [0 4]]

  # 矩阵点乘两种写法

  print(A.dot(B)) # 得到 [[5 4] [3 4]]

  print(np.dot(A,B)) # 得到 [[5 4] [3 4]]

  乘方操作: 对矩阵每个元素进行乘方操作

  A = np.range(5)

  A = A ** 2 # 得到 [0 1 4 9 25]

  矩阵拼接:

  使用tile(矩阵,(第一维倍数, 第二维倍数, ...))方法将矩阵对应尺寸上延展对应倍数

  matrix = np.arange(2)

  matrix = np.tile(matrix,(1,3)) # 得到 [[0 1 0 1 0 1]]

  matrix = np.tile(matrix,(3,1)) # 得到 [[0 1] [0 1] [0 1]]

  矩阵的转置,行列式,求逆

  使用.T属性求矩阵的转置

  使用np.linalg.inv(矩阵)求矩阵的逆

  使用np.linalg.det(矩阵)求矩阵的行列式

  matrix = np.arange(1,5).reshape(2,2)

  # 求矩阵转置

  print(matrix.T) # 得到 [[1 3] [2 4]]

  # 求矩阵的逆

  print(np.linalg.inv(matrix)) # 得到 [[-2. 1. ] [ 1.5 -0.5]]

  # 求矩阵的行列式

  print(np.linalg.det(matrix)) # 得到 -2.0000000000000004

  Pandas

  pandas数据读取

  使用pandas的read_csv()方法读取csv数据,读取到的数据将会被包装成一个DataFrame对象.

  food_info = pd.read_csv("food_info.csv")

  type(food_info) # pandas.core.frame.DataFrame

  food_info.dtypes # DataFrame中包含的每个对象都被看成Numpy对象

  food_info.columns.tolist() # 得到所有列名

  food_info.values.tolist() # 以np.array形式返回其内容

  pandas数据展示

  调用DataFrame对象的head(行数)方法显示前行数行,tail(行数)方法显示前head行.

  food_info.head() # 显示前5行

  food_info.head(3) # 显示前3行

  food_info.tail() # 显示后5行

  调用DataFrame对象的shape()方法返回其矩阵形状

  food_info.shape # (8618, 36)

  调用DataFrame对象的loc[行数]属性取第行数行,行数可以是一个int数或一个列表

  若行数为一个int数字,则返回一个Series对象

  若行数为一个列表,则返回一个DataFrame对象

  type(food_info.loc[[0]]) # pandas.core.frame.DataFrame

  type(food_info.loc[0]) # pandas.core.series.Series

  food_info.loc[3:5]

  food_info.loc[[2,5,10]]

  对DataFrame对象使用下标索引可以返回某几列

  若传入一个索引值,则返回一个Series对象

  若传入一个索引列表,则返回一个DataFrame对象

  ndb_col = food_info["NDB_No"]

  zinc_copper_col = food_info[["Zinc_(mg)", "Copper_(mg)"]]

  type(ndb_col) # pandas.core.series.Series

  type(zinc_copper_col) # pandas.core.frame.DataFrame

  Pandas数据处理

  对DataFrame对象进行加减乘除,等价于对其每一个元素进行加减乘除

  div_100 = food_info["Iron_(mg)"] / 100

  add_100 = food_info["Iron_(mg)"] + 100

  sub_100 = food_info["Iron_(mg)"] - 100

  mult_100 = food_info["Iron_(mg)"] * 100

  例子: 计算加权指标

  # Score = 2*(protein_(g))-0.75*(Lipid_Tot_(g))

  weighted_protein = food_info["Protein_(g)"] * 2

  weighted_fat = -0.75 * food_info["Lipid_Tot_(g)"]

  initial_rating = weighted_protein + weighted_fat

  取最值,平均值: max(),min(),mean(),Pandas会自动剔除不存在的坏值

  # 使用max()取最大值

  max_calories = food_info["Energ_Kcal"].max()

  mean_calories = food_info["Energ_Kcal"].mean()

  例子: 归一化数据并将其作为新行

  normalized_protein = food_info["Protein_(g)"] / food_info["Protein_(g)"].max()

  normalized_fat = food_info["Lipid_Tot_(g)"] / food_info["Lipid_Tot_(g)"].max()

  food_info["Normalized_Protein"] = normalized_protein

  food_info["Normalized_Fat"] = normalized_fat

  排序

  sort_value()方法将所有行按值排序

  sort_index()方法将所有行按索引排序

  # 第一个参数: 排序的键

  # inplace: 是否直接替换原对象

  # ascending: 升序与否

  food_info.sort_values("Sodium_(mg)", inplace=True)

  food_info.sort_values("Sodium_(mg)", inplace=True, ascending=False)

  数据透视表

  titanic_surival = pd.read_csv("titanic_train.csv")

  使用pivot_table()函数生成数据透视表,其参数如下

  index:指定以哪个指标为基准进行统计

  values:统计的字段,可以为索引,也可以为索引列表

  aggfunc:对统计字段的值应用的方法,默认取平均值,即np.mean()

  # 统计不同船舱的获救概率

  passenger_survival = titanic_surival.pivot_table(index="Pclass", values="Survived", aggfunc=np.mean)

  # 统计不同船舱的年龄

  passenger_age = titanic_surival.pivot_table(index="Pclass", values="Survived")

  # 统计每个港口的 总票价 和 总获救人数

  port_stats = titanic_surival.pivot_table(index="Embarked", values=["Fare", "Survived"], aggfunc=np.sum)

  删除空值无锡妇科哪家医院好 http://www.87554006.com/

  使用dropna()来删除带有空值的行或列,其参数列表如下

  axis:维度,取0删除有空值的列,取1删除有空值的行

  subset:删除掉subset字段有空值的行

  # 删除掉所有有空值的列, axis=1

  drop_na_columns = titanic_surival.dropna(axis=1)

  # 删除掉所有["Age"或"Sex"字段]有空值的行

  new_titanic_survival = titanic_surival.dropna(axis=0, subset=["Age", "Sex"])

  重新建立索引

  使用reset_index方法来重新建立索引

  new_titanic_survival = titanic_surival.sort_values("Age", ascending=False)

  # 将数据集按照当前顺序重新建立索引,drop代表放弃原来索引

  titanic_reindexed = new_titanic_survival.reset_index(drop=True)

  DataFrame对象的apply(函数)方法可以对数据每一列都执行自定义函数,并将结果汇总到一个Series对象中.

  # 返回每一列的第100名

  def hundredth_row(column):

  # Extract the hundredth item

  hundredth_item = column.loc[99]

  return hundredth_item

  # 对每个字段返回其第100位,下一行等价于 titanic_surival.loc[99]

  hundredth_row = titanic_surival.apply(hundredth_row)

  # 统计每一列的空值个数

  def not_null_count(column):

  column_null = pd.isnull(column)

  null = column[column_null]

  return len(null)

  # 对每个字段返回其空值个数

  column_null_count = titanic_surival.apply(not_null_count)

  # 对每一行的Pclass字段编码

  def which_class(row):

  pclass = row["Pclass"]

  if pd.isnull(pclass):

  return "Unknown"

  elif pclass == 1:

  return "First Class"

  elif pclass == 2:

  return "Second Class"

  elif pclass == 3:

  return "Third Class"

  # 返回每一行的Pclass字段的编码

  classes = titanic_surival.apply(which_class, axis=1)

  Pandas的基本数据结构:DataFrame和Series

  DataFrame和Series为Pandas最重要的两种结构,其中Series类似于一维向量,而DataFrame类似于二维矩阵.

  Series可以看作是Numpy对象的集合,DataFrame可以看作是Series的集合

  fandango = pd.read_csv('fandango_score_comparison.csv')

  # 对DataFrame进行索引取值得到Series

  series_film = fandango['FILM']

  type(series_film) # pandas.core.series.Series

  可以使用Series()构造函数生成Series对象,index参数指定索引

  from pandas import Series

  film_names = fandango['FILM'].values # 得到所有电影名字

  rt_scores = series_rt.values # 得到所有评分值

  # 以电影名字为索引,将电影评分构成一个Series

  series_custom = Series(rt_scores, index=film_names)

  # 这样可以以电影名为索引找到电影

  series_custom[['Minions (2015)', 'Leviathan (2014)']]

  series的底层实现用的是np.ndarray,因此series对象可以替代ndarray作为函数参数

  np.add(series_custom, series_custom)

  np.sin(series_custom)

  np.max(series_custom)

Numpy和Pandas的使用入门的更多相关文章

  1. Python入门之安装numpy和pandas

    最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了. 首要条件,python版本必 ...

  2. Pandas系列之入门篇

    Pandas系列之入门篇 简介 pandas 是 python用来数据清洗.分析的包,可以使用类sql的语法方便的进行数据关联.查询,属于内存计算范畴, 效率远远高于硬盘计算的数据库存储.另外pand ...

  3. pyhton pandas数据分析基础入门(一文看懂pandas)

    //2019.07.17 pyhton中pandas数据分析基础入门(一文看懂pandas), 教你迅速入门pandas数据分析模块(后面附有入门完整代码,可以直接拷贝运行,含有详细的代码注释,可以轻 ...

  4. python安装numpy和pandas

    最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了.首要条件,python版本必须 ...

  5. 如何快速地从mongo中提取数据到numpy以及pandas中去

    mongo数据通常过于庞大,很难一下子放进内存里进行分析,如果直接在python里使用字典来存贮每一个文档,使用list来存储数据的话,将很快是内存沾满.型号拥有numpy和pandas import ...

  6. numpy、pandas

    numpy: 仨属性:ndim-维度个数:shape-维度大小:dtype-数据类型. numpy和pandas各def的axis缺省为0,作用于列,除DataFrame的.sort_index()和 ...

  7. [转] python安装numpy和pandas

    最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了.首要条件,python版本必须 ...

  8. 1.理解Numpy、pandas

    之前一直做得只是采集数据,而没有再做后期对数据的处理分析工作,自己也是有意愿去往这些方向学习的,最近就在慢慢的接触. 首先简单理解一下numpy和pandas:一.NumPy:1.NumPy是高性能计 ...

  9. numpy和pandas简单使用

    numpy和pandas简单使用 import numpy as np import pandas as pd 一维数据分析 numpy中使用array, pandas中使用series numpy一 ...

随机推荐

  1. 套接字编程(TCP)

    json模块补充 json保存的格式中,key值一定要用双引号隔开 import json #把字典转成json格式字符串 dic = {'name': 'lqz', 'xx': False, 'yy ...

  2. V2X:

    一篇文章读懂V2X系列:标准篇 为了提升交通系统的安全性和智能化,智能交通系统的概念正逐渐兴起.智能交通可以利用新一代的通信网络和数据处理能力,提高现有交通系统的整体效率,降低能量损耗,增加运输的安全 ...

  3. JavaScript计算时间前一天跟后一天

    1.获取当前时 //写在HTML <button onclick="goBefore()">前一天</button> <button onclick= ...

  4. 【JZOJ5738】【20190706】锁屏杀

    题目 $n \le 2000 $ 题解 \(B\)的数字可以对1440取模,对三个图分别进行\(dp\)即可 时间复杂度\(O(n\times 1440 \times 10)\) Code #incl ...

  5. 【技术博客】利用Python将markdown文档转为html文档

    利用Python将markdown文档转为html文档 v1.0 作者:FZK 元素简单的md文件 Python中自带有一个markdown库,你可以直接这样使用 md_file = open(&qu ...

  6. .NET 微服务 1. Docker 容器简介和选择

    容器特点 1. 容器可以将应用程序的依赖性和配置(抽象为 Mainfest 文件并部署)打包成一个容器镜像,可以让多次部署操作中的环境保持一致 2. 可以让IT人员很少或者不做修改就可以跨环境部署软件 ...

  7. 《Linux就该这么学》培训笔记_ch11_使用Vsftpd服务传输文件

    <Linux就该这么学>培训笔记_ch11_使用Vsftpd服务传输文件 文章最后会post上书本的笔记照片. 文章主要内容: 文件传输协议 Vsftpd服务程序 匿名访问模式 本地用户模 ...

  8. sql 语言--- DML,DDL,DQL,DCL,TCL,CCL

    结构化查询语言(Structured Query Language)简称SQL                是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理 ...

  9. C语言 宏定义的1<<0 与 直接定义1 有什么区别

    [1]示例程序 如下示例代码: #include <stdio.h> #define TEST1 1 << 0 #define TEST2 (1 << 0) #de ...

  10. Sitecore 8.2 数据库权限设置

    在我的一个项目中,客户决定改变基础设施.在这个过程中,我得到了一些新的东西需要学习.在本文中,我将分享有关Sitecore数据库权限的经验. 在将数据库从一个服务器移动到另一个服务器时,您需要检查提供 ...