Pandas基础知识

caid

分类: 人工智能、学习笔记 1310 0

常用数据类型

  1. Series 一维,带标签数组
    • 用法:
    import pandas as pd
    # 法一
    b = pd.Series([1,3,4,5,2,3,2], index=list("abcdefg")) # index指定索引值,与数组一一对应,b.dtype的值为int64
    
    # 法二
    a = {'name':'zhangsan', 'age':30}  # a.dtype的值为object
    pd.Series(temp_dict)  # 索引=键   索引对应的值=键对应的值
    

    修改数据类型:astype(‘数据类型’)

    • 取值

      (1)根据索引取值

      a['name'] 取name对应索引对应的值

      a[['name','age']] 取不连续的name和age对应索引对应的值

      (2)根据位置取值

      a[0] 取第一行

      a[:2] 取前三行

      a[[0,2]] 取不连续的 1和3 行

    • 获取索引值

      a.index 返回类型为:pandas.indexes.base.Index,可迭代

    • 获取值

      a.values 返回类型为:numpy.ndarray, 可迭代

  2. DataFrame 二维,Series容器
    • 用法
      import pandas as pd
      t = pd.DataFrame(np.arange(12).reshape((3,4)), index=list('abc'), columns=list('wxyz'))
      
      info = {'name':['zhangsan','lisi'], 'age':[12,15], 'sex':['f','m']}
      t2 = pd.DataFrame(info)  # 键为列,值对应的下标为索引
      
      info2 = [{'name':'zhangsan','age':23, 'sex':'F'},{'name':'lisi','age':23, 'sex':'M'}]
      t3 = pd.DataFrame(info2)  # 键为列,每个字典对应的下标为索引
      
    • 行索引:表明不同行,横向索引,叫index, 0 轴, axis = 0
    • 列索引:表明不同列,纵向索引,叫columns, 1轴, axis = 1
    • 缺值:自动填充NaN
    • 属性

      shape: 行数 列数

      ndim: 维度

      values: 对象值,二维ndarary数组

    • 方法

      head(n):前几行

      tail(n):后几行

      info(): 相关信息的预览

      describe():快速综合统计结果

      sort_values(by=‘排序字段’, ascending=False) :按指定字段升序排序

取值

  • 取行:

    (1)df[:20] 前20行

    (2)df[:20]['列索引名'] 取指定列对应的前20行

  • 取列

    (1)df['列索引名']指定列 索引名对应的一列 返回的是Series类型

  • loc和iloc

    loc 通过标签(即列索引)取值

    • t.loc['a','b'] 取a行b列对应的值
    • t.loc['a']t.loc['a',:] 取a对应的一整行
    • t.loc[['a','c'],['b','d']] 多行多列

    iloc 通过为止(即行索引)取值

    • t.iloc[3]t.iloc[3,:] 取第四行
    • t.iloc[:,2] 取第三列
    • t.iloc[:,[2,1]] 取第3列和第2列
    • t.iloc[[0,2],[2,1]] 取第1行和第3行对应的第3列和第2列
    • t.iloc[1:,:2] 取1之后每一行对应2之前每一列

bool索引

df[bool判断表达式]

如:df[(df['列索引名']>10) & (df['列索引名']<20 )] 取df中指定列索引对应的值中10-20之间的元素

缺值处理

pd.isnull(t) 返回的数组中NaN为True,否则为False

pd.notnull(t) 返回的数组中NaN为False,否则为True

t.dropna(axis=0) 删除包含NaN的行

t.dropna(axis=0, how='all', inplace=True)

  • how的值为all时,某行全为NaN时才删除,为any时存在NaN则删除整行
  • inplace为True时,删除之后将结果替换为当前数组。

t.fillna(值) 将NaN填充为指定的值,常填充均值等,如t.fillna(t.mean()) 会将NaN对应列的均值进行填充

t['列索引名'] = t['列索引名'].fillna(t['列索引名'].mean()) 只将指定索引对应的列中NaN对应的值进行填充均值

合并

  • join() 按行合并 df1.join(df2)
  • merge()按列合并
  • df1.merge(df2, on='操作的列名', how='inner')内连接(默认) 交集
  • df1.merge(df2, on='a')方法会将df1中a列的值和df2中a列的值进行比较,然后将相等的值对应的整行进行合并,而且返回的结果中只包含具有可以合并的行
  • df1.merge(df2, on='a', how='outer') 外连接,a列包含的数据为df1和df2中a列元素的并集,每行元素分别对应,有则是原数据(一般a列的元素都有,因为操作列为a),没有则是NaN 并集
  • df1.merge(df2, on='a', how='left') 左连接,以df1为准
  • df1.merge(df2, on='a', how='right') 右连接,以df2为准

分组和聚合

分组: gd = groupby(by='分组字段') 返回类型是可遍历的DataFrameGroupBy类型,遍历后每一个元素为一个元组,

聚合:gd.count()

索引和符合索引

  • 函数

    df.index 获取index

    df.index=['x', 'y'] 指定index

    df.reindex(list('abcdef')) 重新设置index,如果之前没有f行,则f行对应的数据为NaN

    df.set_index('a', drop=False) 指定某一列作为index

    df.set_index('a').index.unique() 返回index的唯一值

    df.swaplevel() 交换符合索引的顺序

  • 取值

    一对多:df.loc['一'].loc['多']

    df.loc['多']['一']

    df['一','多']

    常与swaplevel()搭配

 

 

  • 4人 Love
  • 2人 Haha
  • 1人 Wow
  • 0人 Sad
  • 0人 Angry
Python、数据分析

作者简介: caid

共 0 条评论关于 “Pandas基础知识”

Loading...