pandas&numpy 数据处理~~两万字超全(上)

简介: pandas&numpy 数据处理~~两万字超全(上)

numpy


1. numpy属性

  1. 判断矩阵维度:array.ndim
  2. 判断矩阵形状:array.shape
  3. 判断矩阵元素个数:array.size
#导入numpy
import numpy as np
#创建矩阵
array = np.array([[1,2,3],
                  [3,4,5],
                  [2,3,4]
])
print(array)
    输出:
    [[1 2 3]
     [3 4 5]
     [2 3 4]]
# 几维数组
print('number of dim',array.ndim)     # number of dim 2
# 形状,几行几列数组
print('shape',array.shape)            # shape (3, 3)
# size,一共有一个元素
print('size',array.size)              # size 9


2. 创建array

  1. 创建一维序列:a = np.array([1,2,3,4])
  2. 创建二位矩阵:a = np.array([[1,2,3], [2,3,4]])
  3. 创建随机矩阵:a = np.random.random((3,4))——(3,4)表示3行4列矩阵
  4. 创建一个全部为0 的矩阵:a = np.zeros((3,4),dtype = np.int32)——(3,4)表示3行4列矩阵;dtype设置类型
  5. 创建一个全部为 1 的矩阵:a = np.ones((3,4),dtype = np.int16)
  6. 创建一个全部为 empty 的矩阵:a = np.empty((3,4))
  7. 生成一个有序序列:a = np.arange(12).reshape((3,4))——arange(12)表示0-11的数字,reshape()括号里填写几行几列
  8. 数据区间被分成线段:a = np.linspace(1,10,6).reshape(2,3)——1-10的序列,被分为6段,reshape()定义几行几列
import numpy as np
# 1. 创建一维序列
a = np.array([1,2,3,4],dtype = np.int64)   #dtype  用于查看类型,默认int32,
print(a, a.dtype)       # 输出:[1 2 3 4] int64
print(a.shape)          # 输出:(4,)  ——表示序列,不是矩阵
# 2. 创建二维矩阵
a = np.array([[1,2,3],
             [2,3,4]])
print(a)
    输出:
    [[1 2 3]
     [2 3 4]]
# 3. 创建一个随机生成的矩阵
a = np.random.random((3,4))    #括号内指定行列数即可
print(a)
    输出:
    [[0.96913245 0.42265093 0.62387946 0.83842189]
     [0.00910311 0.31142922 0.74050868 0.67094311]
     [0.79450196 0.63776097 0.3371271  0.16052966]]
# 4. 创建一个全部为0 的矩阵
a = np.zeros((3,4),dtype = np.int32)   # 括号里输入几行几列
print(a)
    输出:
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
# 5. 创建一个全部为 1 的矩阵
a = np.ones((3,4),dtype = np.int16)   # 括号里输入几行几列
print(a)
    输出:
    [[1 1 1 1]
     [1 1 1 1]
     [1 1 1 1]]
# 6. 创建一个全部为 empty 的矩阵
a = np.empty((3,4))   # 括号里输入几行几列,类型为float
print(a)  
    输出:
    [[0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]
# 7. 生成一个有序序列
a = np.arange(12).reshape((3,4))   #reshape()  确定几行几列
print(a)
    输出:
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
# 8. 一个数据区间被分成线段
a = np.linspace(1,10,6).reshape(2,3)   #1-10的序列,被分为5段,reshape()定义几行几列
print(a,a.dtype)
    输出:
    [[ 1.   2.8  4.6]
     [ 6.4  8.2 10. ]] float64


3. numpy基础运算


3.1 一维序列运算

  1. 加法:c=a+b
  2. 减法:c=a-b
  3. 乘法:c=a**b(平方)
# 定义2个一维序列
a = np.array([10,20,30,40])
b = np.arange(4)
print(a)
print(b)
    输出:
    [10 20 30 40]
    [0 1 2 3]
# 1. 减法
c= a-b
print(c)
    输出:[10 19 28 37]
# 2. 加法
d = a+b
print(d)
    输出:[10 21 32 43]
# 3. 乘法
e = b**2   #  **代表平方
f =10*np.sin(a)    # 调用numpy中sin函数
g = a*b   # 对应相乘
print(e)
print(f)
print(g)
    输出:
    [0 1 4 9]
    [-5.44021111  9.12945251 -9.88031624  7.4511316 ]
    [  0  20  60 120]
# 4. 判断矩阵中元素的大小
print(b)
print(b<3)    # 矩阵b中元素是否小于3
print(b==3)   # 矩阵b中元素是否小于3
    输出:
    [0 1 2 3]
    [ True  True  True False]
    [False False False  True]


3.2 二维矩阵运算

  1. 矩阵乘法:
    c = a*b;逐个相乘,要求矩阵维度必须相同,2行2列与3行2列无法相乘
    c_dot = np.dot(a,b)c_dot = a.dot(b);矩阵a与矩阵b相乘
#  定义两个矩阵
a = np.array([
    [0,1],
    [2,1]
])
b = np.arange(4).reshape((2,2))
print(a)
print(b)
    输出:
    [[0 1]
     [2 1]]
    [[0 1]
     [2 3]]
# 1. 矩阵乘法
c = a*b   #对应位置相乘   要求矩阵维度必须相同,2行2列与3行2列无法相乘
print(c)
    输出:
    [[0 1]
     [4 3]]
#矩阵相乘 - 1
c_dot = np.dot(a,b)    #表达方式1
print(c_dot)
    输出:
    [[2 3]
     [2 5]]
#矩阵相乘 - 2
c_dot_2 = a.dot(b)     # 表达方式2
print(c_dot_2)
    输出:
    [[2 3]
     [2 5]]


  1. 矩阵求和、求最大值、最小值
    ①求和:np.sum()
    ②最大值:np.max()
    ③最小值:np.min()


3、求每行或者每列中的sum、最大、最小值

指定行或列用axis,axis = 1,对行操作;axis = 0,对列操作;

①矩阵中每行元素求和:np.sum(a,axis=1)

②矩阵中每列元素求最大值:np.max(a,axis = 0
③矩阵中每行元素求最小值:np.min(a,axis = 1)

# 创建一个随机生成的矩阵
a = np.random.random((2,4))    #括号内指定行列数即可
# 1. 求和、最大值、最小值
print(a)
    输出:
    [[0.40596249 0.55513475 0.6697611  0.27219617]
     [0.21702995 0.78822072 0.74077249 0.45906168]]
print(np.sum(a))   #矩阵中所有元素求和
print(np.max(a))   #矩阵中所有元素的最大值
print(np.min(a))   #矩阵中所有元素的最小值
    输出:
    4.108139341201598
    0.7882207190918352
    0.2170299493607155
# 2. 求每行或者每列中的sum、最大、最小值
#定义axis,axis = 0,按照行求;axis = 0,按照列求
print(a)
    输出:
    [[0.40596249 0.55513475 0.6697611  0.27219617]
     [0.21702995 0.78822072 0.74077249 0.45906168]]
print(np.sum(a,axis = 1))   #矩阵中每行元素求和
print(np.max(a,axis = 0))   #矩阵中每列的最大值
print(np.min(a,axis = 1))   #矩阵中每行的最小值
    输出:
    [1.90305451 2.20508483]
    [0.40596249 0.78822072 0.74077249 0.45906168]
    [0.27219617 0.21702995]


  1. 求矩阵中元素的最大数最小数对应索引:
    ①最小值对应索引:np.argmin(A)
    ②最大值对应索引:np.argmax(A)
  2. 求所有元素的平均值:
    ①方法一:np.mean(A)
    ②方法二:A.mean()
    ③方法三:np.average(A)
  3. 求每行或者每列的平均值:np.mean(A,axis = 0 / 1)
    axis = 0——每一列的平均值;axis = 1——每一行的平均值
  4. 求所有元素的中位数:np.median(A)
  5. 求所有元素累加和:np.cumsum(A)
  6. 累差:np.diff(A)
  7. 非零数的位置:np.nonzero(A)
A = np.arange(2,14).reshape((3,4))
print(A)
    输出:
    [[ 2  3  4  5]
     [ 6  7  8  9]
     [10 11 12 13]]
# 4. 求矩阵中元素的最大数最小数对应索引
print(np.argmin(A))  # 求所有元素中最小数对应的索引
print(np.argmax(A))  # 求所有元素中最大数对应的索引
    输出:
    0
    11
# 5. 求所有元素的平均值
print(np.mean(A))  
print(A.mean())
print(np.average(A))
    输出:
    7.5
    7.5
    7.5
# 6. 求每行或者每列元素的平均值;axis=0,对列计算,axis=1,对行计算
print(np.mean(A,axis = 0))
print(np.mean(A,axis = 1))
    输出:
    [6. 7. 8. 9.]
    [ 3.5  7.5 11.5]
# 7. 求所有元素的中位数
print(np.median(A))  
    输出:7.5
# 8. 求所有元素累加和
print(np.cumsum(A))
    输出:
    [ 2  5  9 14 20 27 35 44 54 65 77 90]
# 9. 累差
print(np.diff(A))   #由3行4列变为3行3列
    输出:
    [[1 1 1]
     [1 1 1]
     [1 1 1]]
# 10. 非零数的位置
print(np.nonzero(A))    
    输出:
    (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
# 输出2个array,第一个array代表行索引,带二个array代表列索引:行索引为0,列索引为0,1,2,3的元素都非零


3.3 排序

  1. 每行都升序排序:np.sort(A)
  2. 转置矩阵:A.Tnp.transpose(A)
  3. 转置后矩阵与转置前相乘:(A.T).dot(A)
  4. 截取——使用clip()函数,超出边界的元素,都变为边界数字
    np.clip(A,5,11) —— A表示矩阵,5和11为边界;小于5的数字变为5,大于11的数字变为11
A=np.arange(14,2,-1).reshape(3,4)
print(A)
    输出:
    [[14 13 12 11]
     [10  9  8  7]
     [ 6  5  4  3]]
# 1. 每行升序排序
print(np.sort(A))  
    输出:
    [[11 12 13 14]
     [ 7  8  9 10]
     [ 3  4  5  6]]
# 2. 转置矩阵 - 两种写法
print(A.T)
print(np.transpose(A))
    均输出:
    [[14 10  6]
     [13  9  5]
     [12  8  4]
     [11  7  3]]
# 3. 转置后矩阵与转置前相乘
print((A.T).dot(A))
    输出:
    [[332 302 272 242]
     [302 275 248 221]
     [272 248 224 200]
     [242 221 200 179]]
# 4. 截取clip(),超出边界的元素,都变为边界数字
print(np.clip(A,5,11))   #小于5的数字变为5,大于11的数字变为11
    输出:
    [[11 11 11 11]
     [10  9  8  7]
     [ 6  5  5  5]]


4. numpy的索引

4.1 一维序列

# 定义一个array
A = np.arange(3,15)
print(A)
    输出:
    [ 3  4  5  6  7  8  9 10 11 12 13 14]
# 1. 获取一维数组指定索引的元素值
print(A[3])   # 索引为 3 的值为6
    输出:6


4.2 二维矩阵

  1. 获取二维数组指定索引的元素值:array[行索引][列索引]
  2. 获取某行、某列值:array[行索引, 列索引]
# 定义一个array
A = np.arange(3,15).reshape((3,4))
print(A)
    输出:
    [[ 3  4  5  6]
     [ 7  8  9 10]
     [11 12 13 14]]
# 1. 获取二维数组指定索引的元素值
print(A[2][1])    #行索引为【2】,列索引为【1】对应的元素值
print(A[2,1]) 
    输出:
    12
    12
# 2. 获取某行、某列值
print(A[2,:])   #行索引为2,所有列
print(A[2,0:2])   #行索引为2,列索引为0,1
print(A[:,2])     #所有行,列索引为2
输出:
[11 12 13 14]
[11 12]
[ 5  9 13]


相关文章
|
7月前
|
监控 物联网 数据处理
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
450 100
Pandas高级数据处理:数据流式计算
|
7月前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:交互式数据探索
Pandas 是数据分析中常用的数据处理库,提供了强大的数据结构和操作功能。本文从基础到高级,逐步介绍 Pandas 中交互式数据探索的常见问题及解决方案,涵盖数据读取、检查、清洗、预处理、聚合分组和可视化等内容。通过实例代码,帮助用户解决文件路径错误、编码问题、数据类型不一致、缺失值处理等挑战,提升数据分析效率。
164 32
|
7月前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
160 31
|
7月前
|
存储 安全 数据处理
Pandas高级数据处理:数据安全与隐私保护
在数据驱动的时代,数据安全和隐私保护至关重要。本文探讨了使用Pandas进行数据分析时如何确保数据的安全性和隐私性,涵盖法律法规要求、用户信任和商业价值等方面。通过加密、脱敏、访问控制和日志审计等技术手段,结合常见问题及解决方案,帮助读者在实际项目中有效保护数据。
140 29
|
7月前
|
缓存 数据可视化 BI
Pandas高级数据处理:数据仪表板制作
在数据分析中,面对庞大、多维度的数据集(如销售记录、用户行为日志),直接查看原始数据难以快速抓住重点。传统展示方式(如Excel表格)缺乏交互性和动态性,影响决策效率。为此,我们利用Python的Pandas库构建数据仪表板,具备数据聚合筛选、可视化图表生成和性能优化功能,帮助业务人员直观分析不同品类商品销量分布、省份销售额排名及日均订单量变化趋势,提升数据洞察力与决策效率。
118 12
|
7月前
|
消息中间件 数据挖掘 数据处理
Pandas高级数据处理:数据流式计算
在大数据时代,Pandas作为Python强大的数据分析库,在处理结构化数据方面表现出色。然而,面对海量数据时,如何实现高效的流式计算成为关键。本文探讨了Pandas在流式计算中的常见问题与挑战,如内存限制、性能瓶颈和数据一致性,并提供了详细的解决方案,包括使用`chunksize`分批读取、向量化操作及`dask`库等方法,帮助读者更好地应对大规模数据处理需求。
151 17
|
7月前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:数据可视化进阶
Pandas是数据分析的强大工具,能高效处理数据并与Matplotlib、Seaborn等库集成,实现数据可视化。本文介绍Pandas在绘制基础图表(如折线图)和进阶图表(如分组柱状图、热力图)时的常见问题及解决方案,涵盖数据准备、报错处理、图表优化等内容,并通过代码案例详细解释,帮助读者掌握数据可视化的技巧。
146 13
|
7月前
|
存储 安全 数据处理
Pandas高级数据处理:数据加密与解密
本文介绍如何使用Pandas结合加密库(如`cryptography`)实现数据加密与解密,确保敏感信息的安全。涵盖对称和非对称加密算法、常见问题及解决方案,包括密钥管理、性能优化、字符编码和数据完整性验证。通过示例代码展示具体操作,并提供常见报错的解决方法。
128 24
|
7月前
|
数据采集 SQL 数据可视化
Pandas高级数据处理:交互式数据探索
Pandas是Python中流行的数据分析库,提供丰富的数据结构和函数,简化数据操作。本文从基础到高级介绍Pandas的使用,涵盖安装、读取CSV/Excel文件、数据查看与清洗、类型转换、条件筛选、分组聚合及可视化等内容。掌握这些技能,能高效进行交互式数据探索和预处理。
82 6
|
7月前
|
存储 数据采集 数据挖掘
Pandas高级数据处理:数据流处理
Pandas是Python中高效处理数据分析的流行库。随着数据量增长,传统的批量处理方式难以满足实时性需求,掌握Pandas的数据流处理技术尤为重要。常见问题包括文件格式不兼容、内存不足、缺失值和重复数据等。针对这些问题,可以通过指定参数读取文件、分块读取、填充或删除缺失值、去除重复数据、转换数据类型等方法解决。此外,还需注意KeyError、ValueError和MemoryError等常见报错,并采取相应措施。掌握这些技巧可提高数据处理效率和准确性。
176 26