numpy 模块

numpy属于第三方库,需要下载安装。

numpy库有两个作用:

  1. 区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型;
  2. 计算速度快

创建矩阵方法:

import  numpy  as  np  #np是约定俗称将numpy简写

np.array() # 创建矩阵
  • 一维矩阵

一维矩阵就相当于列表

arr =np.array([1,2,3])
print(arr) [1 2 3]
  • 二维矩阵
arr = np.array([[1,2,3],[1,2,3]])
print(arr) [[1 2 3]
[1 2 3]]
  • 三维矩阵
arr = np.array([[[1,2,3],[1,2,3]],[[1,2,3],[1,2,3]]])
print(arr) [[[1 2 3]
[1 2 3]] [[1 2 3]
[1 2 3]]]

获取矩阵的行列数

arr = np.array([[12,23,4],[12,3,4]])
print(arr) [[12 23 4]
[12 3 4]] print(arr.shape) #获取矩阵的行和列
(2, 3) print(arr.shape[0]) # 获取矩阵的行
2 print(arr.shape[1]) # 获取矩阵的列
3

切割矩阵

切分矩阵类似于列表的切割,但是与列表的切割不同的是,矩阵的切割涉及到行和列的切割,但是两者切割的方式都是从索引0开始,并且取头不取尾。

arr = np.array([[12,23,4],[10,3,4],[2,4,5]])
print(arr) print(arr[:,:]) #取所有的元素,:默认所有 print(arr[0,:]) #取第一整行 print(arr[:,0]) # 取第一列 print(arr[1,2]) # 取第二行第三列的值 print(arr[arr>10]) # 取大于10的元素 [[12 23 4]
[10 3 4]
[ 2 4 5]]
**************************************************
[[12 23 4]
[10 3 4]
[ 2 4 5]] #取所有的元素,:默认所有
**************************************************
[12 23 4] #取第一整行
**************************************************
[12 10 2] # 取第一列
**************************************************
4 # 取第二行第三列的值
**************************************************
[12 23] # 取大于10的元素

矩阵元素替换

矩阵也是一个可变类型的数据,如果对矩阵进行替换操作,会修改矩阵的元素。

arr = np.array([[12,23,4],[10,3,4],[2,4,5]])
print(arr) arr[1,:]=0 # 取值第二行,并让第二行的元素都为0
print(arr) arr[arr>10] =0 # 取大于10的值,并让其为0
print(arr) [[12 23 4]
[10 3 4]
[ 2 4 5]]
**************************************************
[[12 23 4]
[ 0 0 0] # 取值第二行,并让第二行的元素都为0
[ 2 4 5]]
**************************************************
[[ 0 0 4] # 取大于10的值,并让其为0
[10 3 4]
[ 2 4 5]]

矩阵的合并

arr1 = np.array([[12,23,4],[10,3,4],[2,4,5]])
arr2 = np.array([[11,33,6],[11,7,6],[2,4,5]])
print(arr1)
print('*'*50)
print(arr2)
print('*'*50)
print(np.hstack((arr1,arr2))) # 合并两个矩阵的行,矩阵应该有相同的行 h表示水平 print(np.vstack((arr1,arr2))) #合并两个矩阵的列,矩阵应该有相同的列,v表示垂直 print(np.concatenate((arr1,arr2),axis=0)) #axis=0 表示合并两个矩阵的列,矩阵应该有相同的列,并且axis默认为0 print(np.concatenate((arr1,arr2),axis=1)) #axis=1 表示合并两个矩阵的行,矩阵应该有相同的行,axis默认为0 [[12 23 4]
[10 3 4]
[ 2 4 5]]
**************************************************
[[11 33 6]
[11 7 6]
[ 2 4 5]]
**************************************************
[[12 23 4 11 33 6]
[10 3 4 11 7 6]
[ 2 4 5 2 4 5]] # 合并两个矩阵的行,矩阵应该有相同的行 h表示水平
**************************************************
[[12 23 4]
[10 3 4]
[ 2 4 5]
[11 33 6]
[11 7 6]
[ 2 4 5]]
**************************************************
[[12 23 4]
[10 3 4]
[ 2 4 5]
[11 33 6]
[11 7 6]
[ 2 4 5]] #axis=0 表示合并两个矩阵的列,矩阵应该有相同的列,并且axis默认为0
**************************************************
[[12 23 4 11 33 6]
[10 3 4 11 7 6]
[ 2 4 5 2 4 5]] #axis=1 表示合并两个矩阵的行,矩阵应该有相同的行,axis默认为0

通过函数创建矩阵

  • arange

    arr =np.arange(1,10)  #创建1-9 的数字 一维矩阵
    print(arr) [1 2 3 4 5 6 7 8 9]
  • linspace/loqspace

    print(np.linspace(0,20,6)) # 等差数列 取头也取尾,取6个数,并且前两个数之和等于后一个数
    
    [ 0.  4.  8. 12. 16. 20.]
    
    print(np.logspace(0,20,6))  # 等比数列 取6个数
    
    [1.e+00 1.e+04 1.e+08 1.e+12 1.e+16 1.e+20]
  • zeros/ones/eye/empty

    print(np.zeros((3,4))) # 创建 3*4全是0的矩阵
    
    [[0. 0. 0. 0.]
    [0. 0. 0. 0.]
    [0. 0. 0. 0.]] print(np.ones((3,4))) # 创建3*4 全是1的矩阵 [[1. 1. 1. 1.]
    [1. 1. 1. 1.]
    [1. 1. 1. 1.]] print(np.eye(3)) # 创建3个主元的单位矩阵 [[1. 0. 0.]
    [0. 1. 0.]
    [0. 0. 1.]] print(np.empty((4,4))) # 创建一个4*4的随机矩阵,里面的元素是随机生成的 [[6.23042070e-307 1.42417221e-306 1.37961641e-306 1.24610383e-306]
    [1.69118108e-306 8.06632139e-308 1.20160711e-306 1.69119330e-306]
    [1.78019082e-306 1.78020984e-306 6.23053954e-307 8.06635110e-308]
    [7.56603881e-307 1.78019082e-306 1.78020984e-306 1.60218627e-306]]

矩阵的运算

+	两个矩阵对应元素相加
- 两个矩阵对应元素相减
* 两个矩阵对应元素相乘
/ 两个矩阵对应元素相除,如果都是整数则取商
% 两个矩阵对应元素相除后取余数
**n 单个矩阵每个元素都取n次方,如**2:每个元素都取平方

pandas模块

pandas 是python数据分析的核心模块,它有五大功能:

  1. 支持文件存取操作,数据库(sql)、html、json、pickle、csv(txt、excel)、sas、stata、hdf等。
  2. 支持增删改查、切片、高阶函数、分组聚合等单表操作,以及和dict、list的互相转换。
  3. 支持多表拼接合并操作。
  4. 支持简单的绘图操作。
  5. 支持简单统计分析操作。

series (一维列表)

import numpy as np
import pandas as pd
arr = np.arange(1,10)
print(arr)
s= pd.Series(arr)
print(s) [1 2 3 4 5 6 7 8 9]
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
dtype: int32

DataFrame

  • 创建数据列表
import pandas as pd
import numpy as np # 定义索引(行)的值
dates = pd.date_range('2019-01-01',periods=6) # 定义矩阵内的值
np.random.seed(1)
arr = 10*np.random.randn(6,4) # 进行数据表的合并,column--队列 ,表示列
df = pd.DataFrame(arr,index=dates,columns=['c1','c2','c3','c4'])
print(df) c1 c2 c3 c4
2019-01-01 16.243454 -6.117564 -5.281718 -10.729686
2019-01-02 8.654076 -23.015387 17.448118 -7.612069
2019-01-03 3.190391 -2.493704 14.621079 -20.601407
2019-01-04 -3.224172 -3.840544 11.337694 -10.998913
2019-01-05 -1.724282 -8.778584 0.422137 5.828152
2019-01-06 -11.006192 11.447237 9.015907 5.024943
  • 使用pandas读取字典形式的数据(数组的长度必须相同)

    df2 = pd.DataFrame({'a':1,'b':[2,3],'c':np.arange(2),'d':'hello'})
    print(df2) a b c d
    0 1 2 0 hello
    1 1 3 1 hello

DataFrame属性

dtype	查看数据类型
index 查看行序列或者索引
columns 查看各列的标签
values 查看数据框内的数据,也即不含表头索引的数据
describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据
transpose 转置,也可用T来操作
sort_index 排序,可按行或列index排序输出
sort_values 按数据值来排序
df = pd.DataFrame(arr,index=dates,columns=['c1','c2','c3','c4'])

print(df.dtypes)
print(df.index)
print(df.columns)
print(df.values) # 查看类型
c1 float64
c2 float64
c3 float64
c4 float64
dtype: object # 查看索引项
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06'],
dtype='datetime64[ns]', freq='D') #查看列
Index(['c1', 'c2', 'c3', 'c4'], dtype='object') # 查看值
[[ 16.24345364 -6.11756414 -5.28171752 -10.72968622]
[ 8.65407629 -23.01538697 17.44811764 -7.61206901]
[ 3.19039096 -2.49370375 14.62107937 -20.60140709]
[ -3.22417204 -3.84054355 11.33769442 -10.99891267]
[ -1.72428208 -8.77858418 0.42213747 5.82815214]
[-11.00619177 11.4472371 9.01590721 5.02494339]] 查看 每一列的极值,均值,中位数
print(df.describe()) c1 c2 c3 c4
count 6.000000 6.000000 6.000000 6.000000
mean 2.022213 -5.466424 7.927203 -6.514830
std 9.580084 11.107772 8.707171 10.227641
min -11.006192 -23.015387 -5.281718 -20.601407
25% -2.849200 -8.113329 2.570580 -10.931606
50% 0.733054 -4.979054 10.176801 -9.170878
75% 7.288155 -2.830414 13.800233 1.865690
max 16.243454 11.447237 17.448118 5.828152

DataFrame取值

print(df['c2']) # 按列取值

2019-01-01    -6.117564
2019-01-02 -23.015387
2019-01-03 -2.493704
2019-01-04 -3.840544
2019-01-05 -8.778584
2019-01-06 11.447237
Freq: D, Name: c2, dtype: float64
print(df[0:2]) #取第一行和第二行

                   c1         c2         c3         c4
2019-01-01 16.243454 -6.117564 -5.281718 -10.729686
2019-01-02 8.654076 -23.015387 17.448118 -7.612069
  • loc/iloc 自定义取值

    print(df.loc['2019-01-01':'2019-01-03']) # 通过自定义的行标签选择数据
    
     c1         c2         c3         c4
    2019-01-01 16.243454 -6.117564 -5.281718 -10.729686
    2019-01-02 8.654076 -23.015387 17.448118 -7.612069
    2019-01-03 3.190391 -2.493704 14.621079 -20.601407
    print(df.iloc[2,1])  # 通过索引取值 == df.values[2,1]
    
    -2.493703754774101
    print(df.iloc[1:4,1:4]) # 行:取第二行到第四行  ; 列:取第二列到第四列
    
                       c2         c3         c4
    2019-01-02 -23.015387 17.448118 -7.612069
    2019-01-03 -2.493704 14.621079 -20.601407
    2019-01-04 -3.840544 11.337694 -10.998913
  • 使用逻辑判断取值

    print(df[df['c1']>0]) # df['c1']>0 取c1列里面大于0的值
    
                       c1         c2         c3         c4
    2019-01-01 16.243454 -6.117564 -5.281718 -10.729686
    2019-01-02 8.654076 -23.015387 17.448118 -7.612069
    2019-01-03 3.190391 -2.493704 14.621079 -20.601407

读取CSV文件

from io import StringIO
import pandas as pd test_data = '''
5.1,,1.4,0.2
4.9,3.0,1.4,0.2
4.7,3.2,,0.2
7.0,3.2,4.7,1.4
6.4,3.2,4.5,1.5
6.9,3.1,4.9,
,,,
''' test_data = StringIO(test_data) # 将数据写入内存
df = pd.read_csv(test_data)
df.columns =['c1','c2','c3','c4']
print(df) c1 c2 c3 c4
0 4.9 3.0 1.4 0.2
1 4.7 3.2 NaN 0.2
2 7.0 3.2 4.7 1.4
3 6.4 3.2 4.5 1.5
4 6.9 3.1 4.9 NaN
5 NaN NaN NaN NaN

处理丢失数据

print(df.isnull())

print(df.isnull().sum())  # 通过isnull()方法后使用sum()方法即可获得该数据集某个特征含有多少个缺失值。

  c1     c2     c3     c4
0 False False False False
1 False False True False
2 False False False False
3 False False False False
4 False False False True
5 True True True True c1 1
c2 1
c3 2
c4 2
dtype: int64
print(df.dropna(axis=0)) #axis=0会删除有Nan值的行

    c1   c2   c3   c4
0 4.9 3.0 1.4 0.2
2 7.0 3.2 4.7 1.4
3 6.4 3.2 4.5 1.5
print(df.dropna(axis=1)) #axis=1会删除有Nan值的列

Empty DataFrame
Columns: []
Index: [0, 1, 2, 3, 4, 5]
print(df.dropna(how='all')) #删除全为NaN值得行或列

c1   c2   c3   c4
0 4.9 3.0 1.4 0.2
1 4.7 3.2 NaN 0.2
2 7.0 3.2 4.7 1.4
3 6.4 3.2 4.5 1.5
4 6.9 3.1 4.9 NaN

python-numpy-pandas的更多相关文章

  1. 有关python numpy pandas scipy 等 能在YARN集群上 运行PySpark

    有关这个问题,似乎这个在某些时候,用python写好,且spark没有响应的算法支持, 能否能在YARN集群上 运行PySpark方式, 将python分析程序提交上去? Spark Applicat ...

  2. Python: NumPy, Pandas学习资料

    NumPy 学习资料 书籍 NumPy Cookbook_[Idris2012] NumPy Beginner's Guide,3rd_[Idris2015] Python数据分析基础教程:NumPy ...

  3. Python Numpy,Pandas基础笔记

    Numpy Numpy是python的一个库.支持维度数组与矩阵计算并提供大量的数学函数库. arr = np.array([[1.2,1.3,1.4],[1.5,1.6,1.7]])#创建ndarr ...

  4. python/numpy/pandas数据操作知识与技巧

    pandas针对dataframe各种操作技巧集合: filtering: 一般地,使用df.column > xx将会产生一个只有boolean值的series,以该series作为dataf ...

  5. python 数据分析工具之 numpy pandas matplotlib

    作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...

  6. 常用统计分析python包开源学习代码 numpy pandas matplotlib

    常用统计分析python包开源学习代码 numpy pandas matplotlib 待办 https://github.com/zmzhouXJTU/Python-Data-Analysis

  7. Numpy&Pandas

    Numpy & Pandas 简介 此篇笔记参考来源为<莫烦Python> 运算速度快:numpy 和 pandas 都是采用 C 语言编写, pandas 又是基于 numpy, ...

  8. Python数据分析--Pandas知识点(三)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...

  9. Python NumPy学习总结

    一.NumPy简介 其官网是:http://www.numpy.org/ NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Num ...

  10. 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础

    在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...

随机推荐

  1. CodeForces - 287B-Pipeline(二分)

    Vova, the Ultimate Thule new shaman, wants to build a pipeline. As there are exactly n houses in Ult ...

  2. NET Core开发

    NET Core开发 Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core ...

  3. 关于C#操作Excel,复制Sheet的记录

    1.先用了NPOI,去做,HSSFWorkbook 里面有一个Copy方法,但这个只支持office2003. 对应的XSSFWorkbook没有些方法. 而且这个这个方法对devexpress导出的 ...

  4. MapReduce作业的执行流程

    MapReduce任务执行总流程 一个MapReduce作业的执行流程是:代码编写 -> 作业配置 -> 作业提交 -> Map任务的分配和执行 -> 处理中间结果 -> ...

  5. spring assert 用法

    spring在提供一个强大的应用开发框架的同时也提供了很多优秀的开发工具类,合理的运用这些工具,将有助于提高开发效率.增强代码质量.下面就最常用的Assert工具类,简要介绍一下它的用法.Assert ...

  6. ASPECTJ 注解。。。

    public interface ISomeService { public void doSome(); public String dade(); } public class SomeServi ...

  7. https的网站使用百度地图的问题

    https的网站使用百度地图,如果你引用的地址没写对的话,加载不出来百度地图,被认为是不安全的JS内容. 引用的地址:http://api.map.baidu.com/api?v=2.0&ak ...

  8. 移动端rem单位和px单位换算

    rem单位是根据html元素的单位在页面根据不同的手机屏幕分辨率动态整体的按比例缩小或放大字体. 假如html{font-size: 14px;},那么1rem=14px; 一个div宽度48px,那 ...

  9. idea2018.1.2 激活

    https://www.cnblogs.com/ycjcham/p/8724451.html

  10. 大家一起和snailren学java-(一)对象导论

    OOP,是java语言的特性.面向对象思想贯穿整个java开发. 那什么是面向对象呢?什么是对象? 在面向对象设计语言看来,万事万物都为对象.生活中的一个物体,有自己的属性,有自己的活动.比如一辆汽车 ...