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

最新文章

  1. Android之UI编程(二):表格布局
  2. redis(二)高级用法
  3. python黑客编程之端口爆破
  4. 帝国cms实现会员注册之后根据所在会员组转向的方法
  5. [转]JNIEnv解析
  6. Jmeter调试工具---Debug Sampler
  7. oc-10-函数与方法的区别
  8. RedMine项目管理系统邮件推送设置(Windows环境)
  9. 你知道HTML标签设计的本意吗? 把HTML标签用到该用的地方去
  10. IOS7学习之路九(ios7自定义UIAlertView)
  11. 关于老版本ubuntu源不能用的问题
  12. Chrome浏览器扩展开发系列之五:Page Action类型的Chrome浏览器扩展
  13. Zabbix(一) : 简介以及Server端安装
  14. Jenkins-Dingding Notification Plugin 配置
  15. 在IAR下移植CC2650 contiki工程
  16. C语言中用于计算数组长度的函数 “strlen() ”。
  17. 作业二 分布式版本控制系统Git的安装与使用
  18. Xamarin Android 下拉列表
  19. elasticsearch6.7 05. Document APIs(8)Multi Get API
  20. Ant scp upload文件至linux server(用java调用Ant api)

热门文章

  1. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D
  2. 洛谷P2664 树上游戏
  3. net core 2.0 web api + Identity Server 4 + angular 5
  4. spoolight on oracle 配置
  5. 跟老男孩学Linx运维---web集群实战笔记
  6. 【机器学习实战】第2章 K-近邻算法(k-NearestNeighbor,KNN)
  7. RK3288开发过程中遇到的问题点和解决方法之Kernel
  8. 读写属性/if判断那点事/数组
  9. (四)我的JavaScript系列:原型链
  10. jquery.restrictFieldLength.js