Pandas的学习(3.DataFrame的创建方法和三种索引方法(iloc、loc、values)以及切片)

    xiaoxiao2022-07-14  156

    DataFrame

       DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成,设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引、

      --- 行索引:  index

     --- 列索引: columns

    --- 值:  values(numpy的二维数组)

     DataFrame的创建

      1.   最常用的方法是传递一个字典来创建。

         DataFrame以字典的键作为每一【列】的名称,以字典的值(一个数组)作为每一列。      此外,DataFrame会自动加上每一行的索引(和Series一样)。     同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。

    from pandas import DataFrame import numpy as np '''通过字典进行创建''' dic = { "height": [175, 180, 169, 177], "age": np.random.randint(18, 25, size=4), "sex": ['女', '男', '女', '男'] } """ DataFrame(data=None, index=None, columns=None, dtype=None,copy=False) 参数解释: data: 为创建数据的字典 index : 不赋值的时,行索引就是从0开始的整数 赋值给一个列表,列表的元素即为行索引 columns : 不赋值时,列名就是字典中键 赋值给一个列表,列名就是列表中的元素, 如果元素比字典的键多的话,这一列的就为NaN """ # columns中如果元素比字典的键多的话,这一列的就为NaN df = DataFrame(dic, index=list('ABCD'), columns=['height', 'age', 'sex', 'weight']) print(df) """ height age sex weight A 175 18 女 NaN B 180 20 男 NaN C 169 19 女 NaN D 177 23 男 NaN """

    2. 打印DataFrame的形状   .shape

    # 打印DataFrame的形状 print(df.shape) """ (4, 4) """

    3.给DataFramed的行索引重新赋值  .index

    # 重新给DataFrame的行索引赋值 df.index = [1, 2, 3, 4] print(df) """ height age sex weight 1 175 22 女 NaN 2 180 23 男 NaN 3 169 22 女 NaN 4 177 21 男 NaN """

    4. 修改DataFrame的列名(给DataFrame的列名重新赋值)

    # 修改DataFrame的列名 df.columns = [0, 2, 4, 6] print(df) """ 0 2 4 6 1 175 24 女 NaN 2 180 23 男 NaN 3 169 21 女 NaN 4 177 22 男 NaN """

     

     DataFrame的索引

    1.对列进行索引

         - 通过类似字典的方式

          - 通过属性的方式

      可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。

    # 通过字典的形式进行检索 【检索列返回值,是Series类型】 print(df['age']) """ A 20 B 20 C 18 D 22 Name: age, dtype: int3 """ # 通过属性的方式进行检索 # 对于DataFrame而言,列名就相当于属性 # DataFrame 是统计数据时,用的表格,某一个事物属性,每一个属性对应的DataFran中的列名 print(df.age) """ A 21 B 22 C 18 D 21 Name: age, dtype: int32 """

    2.对行进行索引     -- 使用.ix[]来进行行索引   (过时)     -- 使用.loc[]加index来进行行索引

        -- 使用.iloc[]加整数来进行行索引

         同样返回一个Series,index为原来的

    # 行索引 '''显示索引''' # 对于行的检索,返回值也为Series print(df.loc['A']) """ Name: age, dtype: int32 height 175 age 19 sex 女 weight 55 Name: A, dtype: object """ # 中括号括起来,代表的是条件, 即检索多行,返回的数据就是DataFrame print(df.loc[['A', 'B']]) """ height age sex weight A 175 24 女 55 B 180 21 男 78 """ ''' 对于切片而言没有列切片(因为列是属性 ) ''' # 可以进行切片索引,左闭右闭 print(df.loc['A':'C']) """ height age sex weight A 175 21 女 55 B 180 20 男 78 C 169 19 女 71 """ '''隐式索引(左闭右开)''' # DataFrame自身有Bug,索引是汉字,有时无法检索结果 print(df.iloc[1:3]) """ height age sex weight B 180 18 男 78 C 169 19 女 71 """

    3.对元素索引的方法  (查询到具体的数据)

      -- 使用列索引

      -- 使用行索引   (iloc[3,1]) 相当于两个参数; iloc[[3,3]] 里面的[3,3] 看做一个参数

      -- 使用values属性 (二维numpy数组) 

    '''对元素进行索引''' # 查询到具体额数据 # 找到 列名为sex的,行索引为B的数据 print(df['sex']['B']) # 男 # 可以直接修改具体的值 (再进行修改值的时候,会抛出一个警告,让我们去copy一份, # 根据具体的情况可以忽略,程序是可以正常执行的) df['sex']['B'] = '女博士' print(df) """ height age sex weight A 175 22 女 55 B 180 20 女博士 78 C 169 18 女 71 D 177 23 男 98 """ '''使用loc取出具体的元素''' # 检索行的时候,参数可以多个,但是列,无法完成这样的操作 print(df.loc['C']['height']) # 169 print(df.loc['C', 'height']) # 169 '''可以使用values取出某个数据''' # 使用values取出第一行的第三个(从0开始,左闭右闭) print(df.values[0,2]) # 55

    【注意】 直接用中括号时:             ---索引表示的是列索引              ----切片表示的是行切片

    最新回复(0)