透彻理解 pandas 切片中 df.loc ,df.iloc

    • 1. 基本定义

      • df.loc:基于标签的数据选择方法。
      • df.iloc:基于位置的数据选择方法。

      2. 什么是标签?什么是位置?

      在深入了解这两种方法之前,我们首先要理解“标签”和“位置”这两个概念。

      标签 (Label)

      标签是数据框或系列的索引。这些索引可以是数字,也可以是字符串或其他数据类型。例如:

       

      在上述例子中,'x', 'y', 'z' 就是数据框 df 的标签(或索引)。

      位置 (Position)

      位置是数据框或系列中的元素的整数位置。无论索引是什么,位置始终从0开始,并按顺序递增。例如,在上述数据框 df 中,'apple' 的位置是 0,'banana' 的位置是 1,'cherry' 的位置是 2。

      3. df.loc vs df.iloc

      让我们通过一些示例更详细地探讨这两种方法的使用。

      示例 1:使用数字索引

       

      在这个例子中,标签和位置是相同的。所以,df.loc[0:1, 'A']df.iloc[0:1, 0] 会产生相同的结果。

      示例 2:使用非连续数字索引

       

      在这种情况下,标签和位置是不同的。所以,df.loc[2:1, 'A'] 选择的是标签为2和1的行,而 df.iloc[0:1, 0] 选择的是位置为0的行。

      示例 3:使用字符串索引

       

      在这种情况下,只有 df.loc 可以使用字符串索引,而 df.iloc 只能使用整数位置。
      最后,举一个相同数字的命令,注意输出的不同,且注意 index_col="Date" 参数的影响。

    •  

       

       注意,如把读入的数据改成设置index成日期,df.loc必须用 Date 访问,例子如下:

       

        上面可以看出,df = pd.read_csv('SH#600000.csv',index_col="Date") 加入了 index_col="Date" 选项,指定了 index是日期,不再是默认的数字,必须要用 Date字符串访问。

    •  

      问:df[['Open', 'Close']] 只选择'Open'和'Close'两列。为什么要加两层[],不加会怎么样?

    • 答: 为什么要使用双层[]

      1. 当你传递一个单独的列名(一个标签)给DataFrame的索引操作符[],Pandas会返回一个Series。当你传递一个列名的列表给索引操作符[]时,Pandas会返回一个DataFrame。

        • 使用单层[]返回Series:df['Open']
        • 使用双层[]返回DataFrame:df[['Open']]df[['Open', 'Close']]
      2. 如果不使用双层[]会怎么样?

        • 如果你使用单一列名,如df['Open'],那么返回的是一个Series。
        • 如果你尝试使用多列名但不使用内部列表,如df['Open', 'Close'],这会导致一个错误,因为Pandas不知道你试图选择哪些列

       

       

      如下图所示:

    •  

      用了a=df[["Date"]] 两个[ ]后,表示 要返回一个DataFrame格式,DataFrame包含 行列表与列列表。

       



 

posted @ 2023-10-05 09:37  chris_he01  阅读(4981)  评论(0)    收藏  举报