• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
龙三少
博客园    首页    新随笔    联系   管理    订阅  订阅

numpy 模块和 pandas 模块

一、numpy模块

1.1 numpy 简介

numpy是python的一种开源的数值计算扩展库,这种库可用来存储和处理大型numpy数组。

numpy库有两个作用:

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

​ 2、计算速度快,甚至要优于python内置的简单运算,使得其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似。

1.2 创建numpy数组

numpy数组即numpy的ndarray对象,创建numpy数组就是把一个列表传入np.array()方法

import numpy as np 

# 创建一维的ndarray对象
arr =np.array([1,2,3])
print(arr,type(arr))   # [1 2 3] <class 'numpy.ndarray'

# 创建二维的ndarray对象
print(np.array([[1,2,3],[4,5,6]]))  

--------------------------------------------------------------------------------
[[1 2 3]
 [4 5 6]]

1.3 numpy数组的常用属性

属性 解释
T 数组的转置(对高维数组而言)
dtype 数组元素的数据类型
size 数组元素的个数
ndim 数组的维数
shape 数组的维度大小(以元组形式)
astype 类型转换
arr = np.array([[1,2,3],[4,5,6]])
print(arr.T)  # 行与列互换
--------------------------------------------------------------------------------
[[1 4]
 [2 5]
 [3 6]]

1.4 切片

arr = np .array([[1,2,3],[4,5,6]])
print(arr[:])  # 取出数组所有元素
print(arr[:,:]) # 取出数组所有元素
print(arr[0,:]) # 取出第0行到第一行的数组
print(arr[0:1,:])  # 取出第0行到第一行的数组,顾头不顾尾
print(arr[0:1,0:1])  # 取出第0行到第一行,第0列到第一列的数组,顾头不顾尾
print(arr[0, 0],type(arr[0, 0]))   #取出第0行到第一行,第0列到第一列的数,输出数组类型
print(arr[0, [0,2]])   #取出第0行第0个元素和第2个元素   [1 3]
print(arr[0, 0] + 1)  #取出第0行第0列的元素加1  2

1.5 取值

arr = np.array([[1, 2, 3], [4, 5, 6]])
arr[0, :] = 0    #将第0行的元素全部变为0
print(arr)
--------------------------------------------
[[0 0 0]
 [4 5 6]]


arr[1, 1] = 1  #将第一行第一列的数字改为1   
print(arr)
--------------------------------------------------------------------------------
[[0 0 0]
 [4 1 6]]

arr[arr < 3] = 3  # 布尔取值   将小于3的数字全部变为3
print(arr)
--------------------------------------------------------------------------------
[[3 3 3]
 [4 3 6]]

1.6 合并

arr1 = np.array([[1, 2, 3], [4, 5, 6]])  # 可变数据类型
arr2 = np.array([[7, 8, 9], [10, 11, 12]])  # 可变数据类型
-------------------------------------------------------
[[1 2 3]
 [4 5 6]]
[[ 7  8  9]
 [10 11 12]]

print(np.hstack((arr1,arr2)))  # 行合并
------------------------------------------------------------
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]

print(np.vstack((arr1,arr2)))  # 列合并
------------------------------------------------
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

print(np.concatenate((arr1, arr2)))  # 默认列合并
print(np.concatenate((arr1, arr2),axis=1))  # 1表示行;0表示列
-----------------------------------------------------------
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]

1.7 通过函数创建numpy数组

方法 详解
array() 将列表转换为数组,可选择显式指定dtype
arange() range的numpy版,支持浮点数
linspace() 类似arange(),第三个参数为数组长度
zeros() 根据指定形状和dtype创建全0数组 np.zeros((5, 5))
ones() 根据指定形状和dtype创建全1数组 np.ones((5, 5))
eye() 创建单位矩阵(对角线上的 数字为1)
empty() 创建一个元素全随机的数组
reshape() 重塑形状

1.7 numpy数组运算

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

1.9 额外了解

numpy随机数

print(np.random.rand(3,4))  #随机生成一个3*4的数组

print(np.random.randint(1,10,(3,4))) # 最小值1,最大值10,3*4

print(np.random.choice([1,2,3,4,5],3))   #随机生成一个元素为3个的数组,数组元素在[1,2,3,4,5]内

重点

随机数种子:所有的随机数是按照随机数种子生成的

时间短则不变,时间长就变

np.random.seed(int(time.time()))
np.random.seed(1)   #如果固定了就不会变
arr1 = np.random.rand(3,4)  # 可变数据类型
print(arr1)
rs = np.random.RandomState(1)  #产生一个随机状态种子,seed为1
print(rs.rand(3,4))
---------------------------------------------------------
[[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01]
 [1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01]
 [3.96767474e-01 5.38816734e-01 4.19194514e-01 6.85219500e-01]]

二、pandas模块

1、导入方式

import pandas as pd

2、作用

用于文件处理,更多地是给excel文件做处理,对numpy+xlrd模块做了一层封装

3、pandas模块的数据类型

3.1 series()

现在一般不使用(一维)

df = pd.series(np.array([1,2,3,4]))
print(df)

3.2 DataFrame() (多维)

3.2.1

dates = pd.date_range('20190101', periods=6, freq='M')
print(dates)    # periods=6, freq='M'代表前六个月
start 开始时间
end 结束时间
periods 时间长度
freq 时间频率,默认为'D',可选H(our),W(eek),B(usiness),S(emi-)M(onth),(min)T(es), S(econd), A(year),…

3.2.2 属性

属性 详解
dtype是 查看数据类型
index 查看行序列或者索引
columns 查看各列的标签
values 查看数据框内的数据,也即不含表头索引的数据
describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据
transpose 转置,也可用T来操作
sort_index 排序,可按行或列index排序输出
sort_values 按数据值来排序

3.2.3 取值

#构造一个数组
dates = pd.date_range('20190101', periods=6, freq='M')
print(dates)

values = np.random.rand(6, 4) * 10
print(values)

columns = ['c4','c2','c3','c1']

#主要掌握
df.values[1,1]   #取出第一行第一列
df.iloc[1,1] = 1  #取出第一行第一列,替换为1

3.2.4 操作表格

1、缺失值处理

df = df.dropna(axis = 0)    #按行删除缺失值
df
df = df.dropna(tresh = 4)   #必须得有4个值,写5就不可以,因为只有4列
df = df.dropna(axis=0)  # 1列,0行
df  #按行取缺失值

2、合并处理数据

df1 = pd.DataFrame(np.zeros((2,3)))  #用0合并两行三列
df2 = pd.DataFrame(np.ones((2,3)))  #用1合并两行三列
pd.concat((df1,df2))  #默认按列合并
pd.concat((df1,df2),axis=1)    axis=1是行,0是列
df1.append(df2)   #往后追加
  • 导入数据,读取json文件菜鸟仅做了解
posted @ 2019-08-23 21:21  柠檬要加醋  阅读(485)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3