Pandas快速学习

这篇博客介绍了Pandas的两种核心数据结构——Series和DataFrame。Series是一维数组,提供丰富的操作方法;DataFrame是二维数据框,可以视为表格型数据。通过构造函数创建Series和DataFrame,可以设置数据、索引和数据类型。博客还讨论了Series的transpose和index属性,以及DataFrame的transpose、columns和index属性,以及如何进行行列定位和条件索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pandas的数据结构

pandas的数据结构是构建在 numpy 的基础上的,pandas 的数据结构可以分为三个级别,低级别的数据结构可以看成是高级别的的数据结构的元素,可以这样理解,最低级别的数据结构是一维数组,第二个级别的数据结构可以看成是二维数组,第三个级别的数据结构可以看成是三维的数组,当然这三个数据结构的复杂程度远高于数组,这三个数据结构分别是Series,DataFramePanel,这些数据结构的详细如下

Series

Series 字面意思为系列,它是一个一维数组,它的复杂程度在于他为一维数组提供了很多的操作方法,便于处理这些一维数据.

  • 创建一个 Series 对象

    • 构造函数的参数

      • data参数,就是传入的数据,必须是一个数组或可迭代的对象

      • index参数,指定索引,必须是一个一维的数组(也可以是多维数组,比如)

      • dtype参数,指定元素的数据类型

        import pandas as pd
              
        s1 = pd.Series([[1,2,3],[2,3,4]],index=[[1,2],[3,4]])
        print(s1)
        

        返回的 Series 如下

        1  3    [1, 2, 3]
        2  4    [2, 3, 4]
        
    • 创建一个 Series 对象

      import pandas as pd
          
      s1 = pd.Series([1,2,3,4])
      

      也可以使用多维数组来创建 Series对象,只不过他会将数据解析成一维的形式,如下

      import pandas as pd
          
      s1 = pd.Series([[1,2,3],[2,3,4]])
      

      它会解析成如下形式

      0    [1, 2, 3]
      1    [2, 3, 4]
      

      其中左边是索引,右边是值,也就是说,无论传多少维的数组,他始终会将之解析成一维的形式,只不过里面的元素会变成n-1维而已.

  • Series 中几个重要的属性

    • T属性:返回Series的转置,转置的类型也是Series,Series的转置不会变,可以这样理解,放回的转置重新被构造成了一个 Series对象.

    • at属性:放回一个pandas.core.indexing._AtIndexer的对象,可以通过这个对象来使用索引访问数据

      import pandas as pd
          
      s = pd.Series([1,2,3])
      print(s.at[1])
      

      返回如下

      2
      

      实际上属性的命名应该使用名词,但是他为了看起来更像是自然语言,用了一个应该是副词吧,作为属性名

DataFrame

DataFrame的字面意思是数据框,从字面意思也可以看出来是一个二维数组,与Series类似,他应该也是被解析成一个二维数组

  • 创建一个DataFrame对象

    • 构造方法参数
      • data:传入的数据,一个二维数组
      • index:索引名,可以理解成是一个的名字
      • columns:列名,跟索引相对,是行的名字
      • dtype:元素的数据结构
    • 构造一个 DataFrame 对象

      import pandas as pd
      import numpy as np
          
      data_frame = pd.DataFrame([[1,2,3,],[4,5,6],[7,8,9]]
                                ,index=["第一行","第二行","第三行"]
                                ,columns=["第一列","第二列","第三列"]
                                ,dtype=np.int64)
      data_frame
      

      屏幕快照 2019-05-06 下午6.58.54

图-1 返回的数据对象

​ 除了常规方法构造一个 DataFrame 对象外,也可以使用字典创建一个 DataFrame 对象,这样创建对象会将 字典中的key作为列名,字典中的value 作为一列

  • DataFrame 的重要属性

    DataFrame的属性和方法很多很多,这里只说几个比较重要的属性

    • T:返回 DataFrame 的转置

      import pandas as pd
      import numpy as np
          
      data_frame = pd.DataFrame([[1,2,3,],[4,5,6],[7,8,9]]
                                ,index=["第一行","第二行","第三行"]
                                ,columns=["第一列","第二列","第三列"]
                                ,dtype=np.int64)
      data_frame.T
      

      返回如下

      	第一行	第二行	第三行
      第一列	1	4	7
      第二列	2	5	8
      第三列	3	6	9
      
    • index:返回所有列名,为什么说重要呢,可以根据 index 来按行查找数据

      import pandas as pd
      import numpy as np
          
      data_frame = pd.DataFrame([[1,2,3,],[4,5,6],[7,8,9]]
                                ,index=["第一行","第二行","第三行"]
                                ,columns=["第一列","第二列","第三列"]
                                ,dtype=np.int64)
      data_frame.index
      
      Index(['第一行', '第二行', '第三行'], dtype='object')
      
    • columns:与列名相对,返回所有的行名

      import pandas as pd
      import numpy as np
          
      data_frame = pd.DataFrame([[1,2,3,],[4,5,6],[7,8,9]]
                                ,index=["第一行","第二行","第三行"]
                                ,columns=["第一列","第二列","第三列"]
                                ,dtype=np.int64)
      data_frame.columns
      
      Index(['第一列', '第二列', '第三列'], dtype='object')
      
    • loc返回一个定位器,这个要细说

      定位器中类似有两个参数一样,一个操作行(即index),一个操作列(即columns),如下

      data_frame.loc[index,columns]
      

      这样就很容易理解了,下面看一下这个定位器的花式定位,下面的案例都以下面这一个数据为例

      image-20190506193743744

      图 -2 原始数据
      • 定位一行,操作第一个参数

        import pandas as pd
        import numpy as np
              
        data_frame = pd.DataFrame([[1,2,3,],[4,5,6],[7,8,9]]
                                  ,index=["第一行","第二行","第三行"]
                                  ,columns=["第一列","第二列","第三列"]
                                  ,dtype=np.int64)
        data_frame.loc["第一行"]
        

        返回第一行的数据

        第一列    1
        第二列    2
        第三列    3
        Name: 第一行, dtype: int64
        
      • 定位一列,既要操作第一个参数,因为要返回这一列的所有数据,即这一列的所有行,又要操作第二个参数,因为要指定那一列

        import pandas as pd
        import numpy as np
              
        data_frame = pd.DataFrame([[1,2,3,],[4,5,6],[7,8,9]]
                                  ,index=["第一行","第二行","第三行"]
                                  ,columns=["第一列","第二列","第三列"]
                                  ,dtype=np.int64)
        # ':'表示所有,即所有行
        #  即定位第二列的所有数据
        data_frame.loc[:,"第二列"]
        

        返回如下

        第一行    2
        第二行    5
        第三行    8
        Name: 第二列, dtype: int64
        
      • 指定多行多列,第一个参数和第二参数都可以传入一个数组,表示多行多列,这是他会放回一个 DataFrame 对象,既然可以指定多行多列当然也可以切片

        import pandas as pd
        import numpy as np
              
        data_frame = pd.DataFrame([[1,2,3,],[4,5,6],[7,8,9]]
                                  ,index=["第一行","第二行","第三行"]
                                  ,columns=["第一列","第二列","第三列"]
                                  ,dtype=np.int64)
        data_frame.loc[["第一行","第二行"],["第一列","第二列"]]
        

        返回

        第一列第二列
        第一行12
        第二行45
      • 使用条件索引定位

        • 显式条件索引

          import pandas as pd
          import numpy as np
                  
          data_frame = pd.DataFrame([[1,2,3,],[4,5,6],[7,8,9]]
                                    ,index=["第一行","第二行","第三行"]
                                    ,columns=["第一列","第二列","第三列"]
                                    ,dtype=np.int64)
                  
          # 返回最后一行,最后一列
          data_frame.loc[[False,False,True],[False,False,True]]
          

          返回如下

          第三列
          第三行9
        • 隐式条件索引,即使用条件表达式来进行条件索引

          import pandas as pd
          import numpy as np
                  
          data_frame = pd.DataFrame([[1,2,3,],[4,5,6],[7,8,9]]
                                    ,index=["第一行","第二行","第三行"]
                                    ,columns=["第一列","第二列","第三列"]
                                    ,dtype=np.int64)
                  
          # 定位第一列大于 2 的所有行
          data_frame.loc[data_frame["第一列"]>2]
          
          第一列第二列第三列
          第二行456
          第三行789
??正文结束??
### 使用Pandas进行机器学习数据预处理与集成 在机器学习项目中,数据预处理是一个至关重要的环节。Pandas 是一种强大的 Python 数据分析工具,广泛用于数据清洗、转换和准备阶段的工作。以下是关于如何利用 Pandas 进行机器学习相关的数据处理或集成的具体方法: #### 1. 加载数据 通过 `pd.read_csv` 或其他读取函数加载数据文件到 DataFrame 中。这一步通常作为整个流程的第一步完成。 ```python import pandas as pd # 加载 CSV 文件中的数据 data = pd.read_csv('data.csv') ``` 此操作会将数据存储在一个名为 `DataFrame` 的结构化对象中[^1]。 #### 2. 查看数据概览 为了更好地理解数据的内容及其分布情况,可以通过以下命令查看基本信息: ```python # 显示前几行记录 print(data.head()) # 获取描述性统计量 print(data.describe()) ``` 上述代码有助于快速掌握数据的整体特性以及是否存在缺失值等问题[^1]。 #### 3. 处理缺失值 对于含有空缺项的数据列,可以选择填充或者删除的方式解决这些问题。 ```python # 填充数值型特征的缺失值为均值 data.fillna(data.mean(), inplace=True) # 删除具有任何 NA/NaN 值的所有样本 cleaned_data = data.dropna() ``` 这里提供了两种常见的策略来应对不完整的观测实例——要么填补它们,要么干脆移除掉那些不符合条件的部分[^1]。 #### 4. 特征工程 创建新的变量或将现有字段重新编码成更适合算法的形式也是常见做法之一。 ```python from sklearn.preprocessing import LabelEncoder le = LabelEncoder() # 对分类属性执行标签编码 for column in ['category']: if data[column].dtype == type(object): data[column] = le.fit_transform(data[column]) ``` 这段脚本演示了怎样把字符串类型的类别映射成为整数形式以便后续建模过程能够顺利运行。 #### 5. 划分训练集测试集 最后,在正式进入模型构建之前还需要随机抽取一部分原始资料留作验证用途。 ```python from sklearn.model_selection import train_test_split X = cleaned_data.drop(['target'], axis=1) y = cleaned_data['target'] X_train, X_val, y_train, y_val = train_test_split( X, y, test_size=.2, random_state=42) ``` 至此为止完成了全部准备工作,并准备好输入给预测器使用的最终版本矩阵[^1]。 综上所述,借助于 Pandas 库我们可以高效便捷地实现从导入初始文档直至分割完毕待用素材这一系列复杂而又必要的前期作业;与此同时它还具备良好的兼容性和扩展能力从而可以无缝衔接至诸如 SciKit-Learn 等主流框架之中继续发挥更大作用[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值