numpy以及pandas的具体使用

本文详细介绍了NumPy和Pandas的高级用法,包括数组操作、数据读写、索引、数据清洗及时间序列处理。展示了如何利用NumPy进行高效数值计算,以及Pandas在数据处理和分析中的强大功能。

numpy方法的使用 numpy方法:快速,方便,科学计算的基础库,重在数值计算,多用于大型,多维数组上执行数值运算

import numpy as np

np.arange方法

 np.array(range(10)) = np.arange(10)
 a=np.arange(24) #创建数组
 array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
   17, 18, 19, 20, 21, 22, 23])
 
  a.reshape(4,6)   #改变数组为四行六列
  array([[ 0,  1,  2,  3,  4,  5],
   [ 6,  7,  8,  9, 10, 11],
   [12, 13, 14, 15, 16, 17],
   [18, 19, 20, 21, 22, 23]])
  
  a.reshape(2,3,4)   # 改变数组为两块三行四列  可以把2理解为分成两块
  array([[[ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 8,  9, 10, 11]],
   [[12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23]]])
    
   b = a.reshape((a.shape[0]*a.shape[1],))  shape[0]为行shape[1]为列
   a.flatten()  将二维数组自动展开

当把数组a进行 加减乘除运算时 是将数组里的每个元素都进行加减乘除操作

当数组之间进行加减乘除时 必须有同维度的才能计算 例如a.reshape(4,6)与a.reshape(1,6) 和a.reshape(4,1)具有相同行数或列数可以进行运算shape(3,3,2)与shape(3,2)同样可以进行运算

使用numpy读取数据

    t1 = np.loadtxt("file_path",delimiter=",",dtype="int",unpack="1")  #delimiter为分隔的意思 dtype为科学计数法 unpack相当于转置 即是把行转化为列 

数组的拼接

   np.vstack((t1,t2)) #将t1 t2竖直拼接
   np.hstack((t1,t2)) #将 t1 t2水平拼接

numpy的索引方式

   t[:,2:4]  #取第三列到第五列的值
   t[:,2:4] = 0  #取第三列到第五列的值 并改为0
   t<10   # 返回布尔类型True False
   t[t<10] =1 # 取小于10的 并改为1
   np.where(t<10,0,10) # 将t<10的设为0  t>10的值设为10
   t.clip(10,20)  # 将小于10的替换为10 大于20的替换为20
   t = t.astpy(float) # 将int整型 转化为浮点类型
   np.zeros((3,4)) #构造全为0的数组 np.one构造全为1的数组
   np.eye(4) #创建一个对角线全为1的正方形数组(方阵)
   np.argmax(t,axis=0) # 取每一行上面最大值
   np.argmin(t,axis=1) # 取每一列上面最小值

pandas的使用 可用来处理numpy不能处理的非数值类型数据比如字符串,时间序列

pandas常用数据类型有 Series (一维 带标签数组)DateFrame(二维 series容器)

import pandas as pd

Series 的创建以及使用

  t = pd.Series([1,18,2,3,1],index=list("abcde"))

在这里插入图片描述
将字典转化为series类型在这里插入图片描述

       t1["age"] #取索引为age的值  =t1[1] 也可以通过位置来取
       t1.index  #取索引
       t1.values  # 取值
       pd.read_csv("file_path")  #pandas读取数据 csc文件

DataFrame 的创建和使用既有行索引(index 0轴 axis=0)又有列索引(column 1轴 axis=1 )

  t =pd.DataFrame(np.arange(12).reshape((3,4)))
         t
         0  1   2   3
      0  0  1   2   3
      1  4  5   6   7
      2  8  9  10  11
  t1=pd.DataFrame(np.arange(12).reshape((3,4)),index=list("abc"),columns=list("wxyz"))
         t1
         w  x   y   z
      a  0  1   2   3
      b  4  5   6   7
      c  8  9  10  11
  t1.loc["a","w"]   t1.loc["a",["x","y"]] # 根据标签索引行数据
  t1.loc["a":"c",["x","y"]] # 取a到c行的 xy数据
  t1.iloc[1,:]  # 取第二行的数据
  t1.iloc[:,2]  #取第三列的数据
  t1.iloc[:,[2,1]] # 取第三列二列的数据
  t1.iloc[[0,2][2,1]]  # 取第一行第三行的 第三列和第二列的数据
  t1.iloc[1:,:2] = 30  # 取第一行之后的每一行中的第三列之前的每一列数据替换为30
  
  t2 = {"name":["xiaoming","xiaohua"],"age":[26,30],"tel":[10098,10090]}
     pd.DataFrame(t2)
             name  age    tel
      0  xiaoming   26  10098
      1   xiaohua   30  10090
  t3 = [{"name":"xiaoming","age":26,"tel":10098},{"name":"xiaoting","age":46,"tel":10022},{"name":"xiaowanging","age":36,"tel":10008}]
      pd.DataFrame(t3)
             name  age    tel
      0     xiaoming   26  10098
      1     xiaoting   46  10022
      2  xiaowanging   36  10008
  df.head(5)  #显示前五行 默认是5行
  df.tail()   #显示后几行
  df.info()  #显示df的概览
  df.describle()  #展示最大值最小值方差等
  df.sort_values(by="依据",ascending=False)
  df[:20]["values"] # 取前二十行values列的值
  df[(df["name"].str.len()>5)&(df["age"]>20)] #取名字字符串大于5 且年龄大于20的数据 &代表且 |代表或

在数据中存在NAN 先判断是否为NAN

       pd.isnull(df)或pd.notnull(df)

处理方法1 删除数据

       dropna(axis=0,how="any",inplace=False) # 删除  how默认为any 指删除某一行有一个为NAN的那一行 all指删除全为NAN的那一行 inplace =True 指原地修改 就地修改

处理方法2 填充数据

     t["age"][1] = np.nan  # 将age那一列的第二行数据替换为NAN
     t.fillna(t.mean())   #将为NANvalue填充均值
     t["age"].fillna(t["age"].mean())  #只对age那一列进行操作
     t[t==0] = np.nan  #处理为0的数据 当需要计算平均值时需要把0处理为NAN 因为0会参与运算,NAN 不会

DataFrame 索引的方法和属性

      t1.index = ["d","e","f"]      #直接更换df的索引
      t1.reindex(["d","e","h"])   
             w    x    y    z
         d  0.0  1.0  2.0  3.0
         e  4.0  5.0  6.0  7.0
         h  NaN  NaN  NaN  NaN
      t1.set_index("x")  # 把x设置为索引
           w   y   z
        x           
        1  0   2   3
        5  4   6   7
        9  8  10  11
      t1.set_index("x",drop=False)  #drop=false 指不丢弃x那一列
             w  x   y   z
          x               
          1  0  1   2   3
          5  4  5   6   7
          9  8  9  10  11
      t1["w"].unique()   # 取某一列不唯一的值
       ([0, 4, 8])
      t1.set_index(["x","z"])  #设置两个索引
			         w   y
			  x z        
			  1 3    0   2
			  5 7    4   6
			  9 11   8  10

pandas时间序列 :

将不规则的时间字符串转换为pandas时间序列

       pd.todatetime()

重采样

     t.resample("M")    #按月份进行重采样  当从月份变为天数 为升采样 天数变为月份为降采样				      
<think>好的,我现在要帮用户介绍NumPyPandas使用。用户之前问过各省大学生毕业人数,现在转向了Python库,可能是在做数据分析相关的工作或学习。需要判断他们的使用场景,可能是数据处理、统计分析或者机器学习。 首先,用户的问题比较基础,直接要求介绍这两个库的使用,所以需要从基本概念开始,然后涵盖主要功能和常见操作。得确保内容结构清晰,分点说明,让用户容易理解。 用户可能已经了解Python的基础,但不确定他们对数组和数据结构的熟悉程度。需要避免过于深入底层细节,但也要提供足够的实用例子。考虑到他们之前查询的是统计数据,可能更关注数据清洗、处理和分析方面的功能,所以需要重点突出Pandas数据处理上的优势,比如DataFrame的操作。 需要检查是否有必要区分NumPyPandas的不同应用场景,比如NumPy适合数值计算Pandas更适合表格数据处理。同时,要提供安装命令,方便新手开始使用。常见的示例如创建数组、数据筛选、聚合函数等,这些对用户来说可能最直接有用。 还要注意用户是否需要对比这两个库,或者如何结合使用。比如,NumPy数组和Pandas DataFrame之间的转换,这样用户可以在需要高性能计算使用NumPy,而在处理结构化数据时用Pandas。 另外,用户可能想知道何时选择哪个库,所以总结部分要明确各自的优势。最后,确保语言简洁,步骤清晰,避免使用复杂术语,必要时给出代码示例,帮助用户快速上手。</think>--- ### **NumPyPandas 基础使用指南** NumPyPandasPython 数据分析的核心库,**NumPy 专注于数值计算**,**Pandas 擅长表格数据处理**。以下从**核心功能**、**常用操作**和**对比总结**三方面进行说明: --- #### **一、NumPy 核心功能与示例** **1. 多维数组(ndarray)** NumPy 的核心是 `ndarray`,支持高效数学运算: ```python import numpy as np # 创建数组 arr = np.array([1, 2, 3]) # 一维数组 matrix = np.array([[1, 2], [3, 4]]) # 二维数组 # 快速生成序列 zeros = np.zeros((2, 3)) # 全0数组 [[0,0,0], [0,0,0]] range_arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8] ``` **2. 广播(Broadcasting)** 允许不同形状数组进行逐元素运算: ```python a = np.array([1, 2, 3]) b = 2 print(a * b) # 输出 [2, 4, 6](自动扩展标量) ``` **3. 向量化运算** 避免循环,提升计算速度: ```python # 计算平方 arr = np.array([1, 2, 3]) squares = arr ** 2 # [1, 4, 9] # 矩阵乘法 A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) print(A @ B) # 输出 [[19, 22], [43, 50]] ``` --- #### **二、Pandas 核心功能与示例** **1. Series 与 DataFrame** - **Series**:带索引的一维数据(类似字典) ```python import pandas as pd s = pd.Series([10, 20, 30], index=['a', 'b', 'c']) print(s['b']) # 输出 20 ``` - **DataFrame**:二维表格(类似 Excel) ```python data = {'姓名': ['张三', '李四'], '年龄': [21, 23]} df = pd.DataFrame(data) ``` **2. 数据清洗与筛选** ```python # 读取 CSV 文件 df = pd.read_csv('data.csv') # 筛选年龄 >20 的记录 filtered = df[df['年龄'] > 20] # 处理缺失值 df.fillna(0, inplace=True) # 用0填充空值 ``` **3. 聚合与分组** ```python # 按省份统计平均薪资 result = df.groupby('省份')['薪资'].mean() # 多条件聚合 agg_result = df.groupby('部门').agg({'薪资': 'max', '年龄': 'min'}) ``` --- #### **三、NumPyPandas 的协作** 1. **数据转换** ```python # DataFrame 转 NumPy 数组 arr = df.values # NumPy 数组转 DataFrame new_df = pd.DataFrame(arr, columns=['列1', '列2']) ``` 2. **联合计算** ```python # 使用 NumPy 函数处理 Pandas 数据 df['标准化薪资'] = (df['薪资'] - np.mean(df['薪资'])) / np.std(df['薪资']) ``` --- #### **四、关键对比与选择建议** | **维度** | **NumPy** | **Pandas** | |----------------|------------------------------------|-----------------------------------| | **核心对象** | 多维数组 (`ndarray`) | 表格 (`DataFrame`/`Series`) | | **优势场景** | 数学计算、矩阵运算、机器学习 | 数据清洗、统计分析、时间序列处理 | | **性能** | 更高效(C底层优化) | 略低(依赖 NumPy,但优化充分) | | **数据类型** | 同质数据(如全为浮点数) | 异构数据(各列类型可不同) | --- #### **五、学习建议** 1. **安装与导入** ```bash pip install numpy pandas ``` ```python import numpy as np import pandas as pd ``` 2. **练习场景** - **NumPy**:图像处理、线性代数计算、随机数生成 - **Pandas**:CSV/Excel 数据清洗、股票数据分析数据库查询 3. **进阶资源** - 官方文档:[NumPy](https://numpy.org/doc/), [Pandas](https://pandas.pydata.org/docs/) - 实战项目:分析公开数据集(如 Kaggle 的 Titanic 数据集) 如果需要具体场景的代码示例(如数据合并、时间序列处理等),可提供需求方向进一步说明!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值