20/02/08 数据科学包学习 (2)

Pandas

python里分析结构化数据的工具集
基础是numpy:高效能矩阵运算
图形库matplotlib:提供数据可视化

入门文档:link

  • 创建pandas对象:

    • 一维数组Series:
      s=pd.Series(data,index=index)
      index是一个列表,用来作为数据的标签
      性质:类ndarray对象/类dict对象(可使用.get())/标签对其操作
    • 二维数组Dataframe:
      df=pd.DataFrame(data,index=index,columns=columns)
      index是行标签,columns是列标签
      • 由数组创建
        data = pd.DataFrame(np.random.randn(6,4), index=索引列表, columns = 列标签列表)
      • 由字典创建,
        d=pd.DataFrame({‘A’:[1,2,3],‘B’:[‘a’,‘b’,‘c’,‘d’],‘C’:[545,565,585]}) # A/B/C为列标签
      # e.g.
      dates=pd.date_range('20160301',periods=6)
      pd.DataFrame(np.random.randn(6,4),index=dates,columes=list('ABCD'))
      
    • 三维数组Panel:
      目前相对比较少用
      items:坐标轴0,索引对应的元素是一个dataframe
      major_axis:坐标轴1,dataframe里的行标签
      minor_axis:坐标轴2,dataframe里的列标签
      # e.g.
      data={'Item1':pd.DataFrame(np.random.randn(4,3)),
      		'Item2':pd.DataFrame(np.random.randn(4,2))}
      pn=pd.Panel(data)
      pn.to_frame()  # 将三维转换为多维标签表示的二维数组
      
  • 重新索引
    s.reindex(list,fill_value=0) 重新索引,缺失赋予的默认值0
    s.reindex(list,method=‘ffill’) 重新索引,缺失填充前一个值;method=‘bfill’ 缺失填充后一个值
    df.reindex(index=,columns=) 对dataframe的重新索引

  • 查看数据:
    data.values 生成ndarray
    data.shape 查看形状
    data.head() 返回前5行数据
    data.tail() 返回末5行数据
    data.index 返回行标签
    data.columns 返回列标签
    df.value_counts() 每个数字出现几次
    df.mode() 产生次数最多的数字
    data.describe() 查看数据基本统计量(平均数,分位数等)
    df.pivot_table(values=[‘D’],index=[‘A’,‘B’],columns=[‘C’],aggfunc=‘mean’) 对应多值取平均,无对应取空值
    s.unique() 返回Series中不重复的值列表
    s.index.is_unique 判断索引是否重复
    s.isin(元素列表) 判断元素是否在Series中

  • 数据选择
    data[col] 或data.col 选择指定列
    data.loc[label] 根据行标签选择一行
    data.loc[‘20160301’,‘B’] 根据标签选择指定值
    data.iloc[label] 根据索引值选择一行
    data[5:10] 选择多行
    data[bool_vector] 根据布尔向量选择多行
    data.at[pd.Timestamp(‘20160301’),‘B’] 类似,但是必须使用原生数据结构,更高效
    data.iat[1,1] 通过索引编号方位单个位置值
    data[data>0] 条件选择

  • 排序
    data.sort_index(axis=1,acsending=True) 对列标签进行排序
    data.sort_values(by=‘列名’) 通过某一列的值进行排序
    s.rank(method=‘first’/‘average’) 计算Series中值的排名

  • 增/删/改

    • data.copy() 深复制
    • pd.concat([df1,df2,df3,…]) 拼接多个列表
      pd.merge(left,right,on=‘key’) 左右合并
      等效SQL#SELECT * FROM left INNER JOIN right ON left.key=right.key;
      df.append(s,ignore_index=True) 上下合并
    • df.insert(位置索引,‘插入的列名’, 插入列表) 指定位置插入新列
      df.assign(新列名=列值列表) 新增列(会做复制的操作,原数组没变)
    • del df[‘列名’] or df.pop(‘列名’) or df.drop(‘列明’,axis=1) 删除列
      df.drop(‘行名’)
    • df.stack() 将列索引转换为行索引
      stacked.unstack() 将行索引还原为列索引
      df.add_prefix(‘前缀’) 为列名添加前缀
  • 基础运算

    • 空值
      df.dropna() 将含空值行去除
      df.fillna(value=0) 将空值替换为0
      pd.isnull(df) 判断数组里是否有空数据
      pd.isnull(df).any().any() 判断数组里整体是否有空数据
    • 递延
      pd.Series([1,3,5,np.nan,6,8],index=dates).shift(2) 序列递延两位开始取值
    • 整体运算
      df.sub(s,axis=‘index’) 二维数组df的每一列都减去一维数组s
      df.apply(np.cumsum,axis=) 函数运用(对行或列,默认按列):二维数组应用累加函数
      df.applymap(fun) 函数运用(对所有值)
  • 分组

    • df.groupby(‘A’).sum() 分组统计
    • df.groupby(‘A’).size() 获取每个分组内有多少个值
    • 通过字典映射分组
      mapping = {‘a’:red, ‘b’:‘red’, ‘c’:blue, ‘d’:‘orange’, ‘e’:‘blue’}
      df.groupby(mapping, axis =1)
    • df.groupby(len) 通过函数分组
    • df.groupby(level=, axis= ) 通过级分组
  • 时间序列

    • 创建时间序列
      dates=pd.date_range(‘20160301’,periods=6) 默认间隔为天
      dates=pd.period_range(‘2000Q1’,‘2016Q1’,freq=‘Q’)
    • 重新采样
      s.resample(‘2Min’,how=‘sum’) 采样
    • 计算间隔时间
      pd.Timestamp(‘20160301’)-pd.Timestamp(‘20160201’)
      pd.Timestamp(‘20160301’)+pd.Timedelta(days=5)
      df[‘grade’]=df.raw_grade.astype(‘category’) 添加category
  • 数据IO
    df.to_csv(‘data.csv’) 导出数据
    pd.read_csv(‘data.csv’,index_col=0) 读取数据
    pd.read_table(‘data.dat’,sep=’ ',header=None,names=列名列表) 读取dat数据

  • 其他
    %matplotlib inlines #在网页上作图
    formater=’{0:.03f}’.format 定义格式函数

发布了17 篇原创文章 · 获赞 0 · 访问量 807

猜你喜欢

转载自blog.csdn.net/weixin_44602323/article/details/104217649
今日推荐