python-numpy-pandas
numpy 模块
numpy属于第三方库,需要下载安装。
numpy库有两个作用:
- 区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型;
- 计算速度快
创建矩阵方法:
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数据分析的核心模块,它有五大功能:
- 支持文件存取操作,数据库(sql)、html、json、pickle、csv(txt、excel)、sas、stata、hdf等。
- 支持增删改查、切片、高阶函数、分组聚合等单表操作,以及和dict、list的互相转换。
- 支持多表拼接合并操作。
- 支持简单的绘图操作。
- 支持简单统计分析操作。
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的更多相关文章
- 有关python numpy pandas scipy 等 能在YARN集群上 运行PySpark
有关这个问题,似乎这个在某些时候,用python写好,且spark没有响应的算法支持, 能否能在YARN集群上 运行PySpark方式, 将python分析程序提交上去? Spark Applicat ...
- Python: NumPy, Pandas学习资料
NumPy 学习资料 书籍 NumPy Cookbook_[Idris2012] NumPy Beginner's Guide,3rd_[Idris2015] Python数据分析基础教程:NumPy ...
- Python Numpy,Pandas基础笔记
Numpy Numpy是python的一个库.支持维度数组与矩阵计算并提供大量的数学函数库. arr = np.array([[1.2,1.3,1.4],[1.5,1.6,1.7]])#创建ndarr ...
- python/numpy/pandas数据操作知识与技巧
pandas针对dataframe各种操作技巧集合: filtering: 一般地,使用df.column > xx将会产生一个只有boolean值的series,以该series作为dataf ...
- python 数据分析工具之 numpy pandas matplotlib
作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...
- 常用统计分析python包开源学习代码 numpy pandas matplotlib
常用统计分析python包开源学习代码 numpy pandas matplotlib 待办 https://github.com/zmzhouXJTU/Python-Data-Analysis
- Numpy&Pandas
Numpy & Pandas 简介 此篇笔记参考来源为<莫烦Python> 运算速度快:numpy 和 pandas 都是采用 C 语言编写, pandas 又是基于 numpy, ...
- Python数据分析--Pandas知识点(三)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...
- Python NumPy学习总结
一.NumPy简介 其官网是:http://www.numpy.org/ NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Num ...
- 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础
在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...
随机推荐
- Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C
It's that time of the year, Felicity is around the corner and you can see people celebrating all aro ...
- 寒假作业第二组E题题解
注意看题,注意看题,注意看题.重要的事情三遍感觉都不够.不怕大家笑话,这道题RuntimeError 9次,我一直以为是哪里越界了,结果最后发现的时候,真是无语了,题目里说了,所有的integer都不 ...
- Jmeter4.0----cookie(8)
1.说明 在脚本编写的过程中,我们常常会遇到用户登录的情况,并且将部分重要信息保存在用户的cookie中,所以,来说一下,对用户登录产生cookie的操作情况. 2.步骤 第一步:添加HTTP Coo ...
- 「干货分享」模块化编程和maven配置实践一则
封面 说到模块化编程,对我个人而言首先起因于团队协作的需要,也就是组织架构结构特点来决定,而不是跟风求得自我认同,看看我们团队的组织结构: 其中: 基础平台部职责: 1.AI实验室:语音,图像 ...
- Servlet 示例
引入jar包: servlet-api.jar ParameterServlet.java package com.mousewheel.springmvc; import java.io.IOExc ...
- 定时器 & 日期时间对象 & 正则
1 JavaScript 计时事件 通过使用 JavaScript,有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行,这称之为计时事件. 两个关键方法是: setInterv ...
- Python使用selenium进行爬虫(一)
JAVA爬虫框架很多,类似JSOUP,WEBLOGIC之类的爬虫框架都十分好用,个人认为爬虫的大致思路就是: 1.挑选需求爬的URL地址,将其放入需求网络爬虫的队列,也可以把爬到的符合一定需求的地址放 ...
- JS移动端浏览器取消右划后退的几种方法
在开发过程中,发现我们公司所使用的APP有点BUG,在APP中打开网页.H5应用之后,处于首页时,轻微的右划触发了后退事件,导致直接退出网页或者H5应用的页面,这样使得很多需要交互的手势没办法使用.本 ...
- ArcGIS for Server 10.3.X 新型紧凑型缓存的解读和应用
早在2010年年底,牛魔王中王在其博客空间牛魔王的作坊中对ArcGIS 10中推出的紧凑型缓存格式进行了详细的解读,详见<ArcGIS 切片缓存紧凑文件格式分析与使用>.紧随着的4年时间里 ...
- Yii2.0 集成使用富头像上传编辑器
在开发过程中,我们会用到头像上传的功能.这里给大家推荐一款比较流行的头像上传组件,FullAvatarEditor 2.3(富头像上传编辑器). 实际效果如图所示: 1.下载组件,下载地址:http: ...