科学计算库Pandas的使用(附思维导图)

在这里插入图片描述

pandas

Pandas介绍

2008年WesMcKinney开发出的库;
专门用于数据挖掘的开源python库;
以Numpy为基础,借力Numpy模块在计算方面性能高的优势;
基于matplotlib,能够简便的画图;
独特的数据结构;

相较于matplotlib和numpy

  • 增强图表可读性
  • 便捷的数据处理能力
  • 读取文件方便
  • 封装了Matplotlib、Numpy的画图和计算

pandas数据结构

Series

  • Series是一个类似于一维数组的数据结构,它能够保存任何类型的数据,比如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两部分构成。

  • 创建

    • #导入pandas
      import pandas as pd
      pd.Series(data=None, index=None, dtype=None)
      参数:
      data:传入的数据,可以是ndarray、list等
      index:索引,必须是唯一的,且与数据的长度相等。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
      dtype:数据的类型
    • 指定内容,默认索引
      pd.Series(np.arange(10))
    • 指定索引
      pd.Series([6.7,5.6,3,10,2], index=[1,2,3,4,5])
    • 通过字典数据创建
      color_count = pd.Series({‘red’:100, ‘blue’:200, ‘green’: 500, ‘yellow’:1000})
  • Series的属性

    • index
    • values

DataFrame

  • DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引
    行索引,表明不同行,横向索引,叫index,0轴,axis=0
    列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

  • 创建

    • #导入pandas
      import pandas as pd
      pd.DataFrame(data=None, index=None, columns=None)
      参数:
      index:行标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
      columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
  • 属性

    • shape形状
    • index行索引
    • columns列索引
    • values,以array数组形式显示data
    • T转置
    • head(5):显示前5行内容
    • tail(5):显示后5行内容
  • dataframe索引的设置

    • 只能全部设置,不能单个设置
    • 修改行列索引值
      stu = [“学生_” + str(i) for i in range(score_df.shape[0])]
      #必须整体全部修改
      data.index = stu
    • 重设索引
      reset_index(drop=False)
      设置新的下标索引
      drop:默认为False,不删除原来索引,如果为True,删除原来的索引值
      #重置索引,drop=False
      data.reset_index()
    • 以某列值设置为新的索引
      set_index(keys, drop=True)
      keys : 列索引名成或者列索引名称的列表
      drop : boolean, default True.当做新的索引,删除原来的列。当设置了两个或两个以上的index索引,那么数据结构就由DataFrame变成了MultiIndex

MultiIndex

  • MultiIndex是三维的数据结构;
    多级索引(也称层次化索引)是pandas的重要功能,可以在Series、DataFrame对象上拥有2个以及2个以上的索引。

基本数据操作

1 索引操作

  • 直接索引 – 先列后行,是需要通过索引的字符串进行获取
  • loc – 先行后列,是需要通过索引的字符串进行获取
  • iloc – 先行后列,是通过下标进行索引
  • ix – 先行后列, 可以用上面两种方法混合进行索引

2 赋值操作

  • #直接修改原来的值
    data[‘close’] = 1
    #或者
    data.close = 1

3 排序

  • 排序有两种形式,一种对于索引进行排序,一种对于内容进行排序

  • DataFrame排序

    • 使用df.sort_values(by=, ascending=)
      单个键或者多个键进行排序,
      参数:
      by:指定排序参考的键
      ascending:默认升序
      ascending=False:降序
      ascending=True:升序data.sort_values(by=“open”,ascending=True).head() # 按照多个键进行排序
      data.sort_values(by=[‘open’, ‘high’])
    • 使用df.sort_index给索引进行排序
      这个股票的日期索引原来是从大到小,现在重新排序,从小到大
      #对索引进行排序
      data.sort_index()
  • Series排序

    • 使用series.sort_values(ascending=True)进行排序
    • 使用series.sort_index()进行排序

DataFrame运算

1 算术运算

  • add(other)

    • data[‘open’].add(1)
  • sub(other)’

2 逻辑运算

  • 2.1 逻辑运算符号
    例如筛选data[“open”] > 23的日期数据
    data[“open”] > 23返回逻辑结果

    • #逻辑判断的结果可以作为筛选的依据
      data[data[“open”] > 23].head()
    • 完成多个逻辑判断,
      data[(data[“open”] > 23) & (data[“open”] < 24)].head()
  • 逻辑运算函数
    query(expr)
    expr:查询字符串
    通过query使得刚才的过程更加方便简单

data.query(“open<24 & open>23”).head()
isin(values)
例如判断’open’是否为23.53和23.85

#可以指定值进行一个判断,从而进行筛选操作
data[data[“open”].isin([23.53, 23.85])]

3 统计运算

  • 3.1 describe
    综合分析: 能够直接得出很多统计结果,count, mean, std, min, max 等

#计算平均值、标准差、最大值、最小值
data.describe()

  • 3.2 统计函数

    • count Number of non-NA observations
      sum Sum of values
      mean Mean of values
      median Arithmetic median of values
      min Minimum
      max Maximum
      mode Mode
      abs Absolute Value
      prod Product of values
      std Bessel-corrected sample standard deviation
      var Unbiased variance
      idxmax compute the index labels with the maximum
      idxmin compute the index labels with the minimum
  • 3.3 累计统计函数

    • 函数 作用
      cumsum 计算前1/2/3/…/n个数的和
      cummax 计算前1/2/3/…/n个数的最大值
      cummin 计算前1/2/3/…/n个数的最小值
      cumprod 计算前1/2/3/…/n个数的积

4 自定义运算

  • apply(func, axis=0)
    func:自定义函数
    axis=0:默认是列,axis=1为行进行运算
    定义一个对列,最大值-最小值的函数
    data[[‘open’, ‘close’]].apply(lambda x: x.max() - x.min(), axis=0)

5 pandas画图工具

  • pandas.DataFrame.plot
    DataFrame.plot(kind=‘line’)
    kind : str,需要绘制图形的种类
    ‘line’ : line plot (default)
    ‘bar’ : vertical bar plot
    ‘barh’ : horizontal bar plot
    ‘hist’ : histogram
    ‘pie’ : pie plot
    ‘scatter’ : scatter plot
  • pandas.Series.plot

6 文件读取与存储

  • CSV

    • read_csv
      pandas.read_csv(filepath_or_buffer, sep =’,’, usecols )
      filepath_or_buffer:文件路径
      sep :分隔符,默认用","隔开
      usecols:指定读取的列名,列表形式
    • to_csv
      DataFrame.to_csv(path_or_buf=None, sep=’, ’, columns=None, header=True, index=True, mode=‘w’, encoding=None)

path_or_buf :文件路径
sep :分隔符,默认用","隔开
columns :选择需要的列索引
header :boolean or list of string, default True,是否写进列索引值
index:是否写进行索引
mode:‘w’:重写, ‘a’ 追加

  • HDF5

    • read_hdf与to_hdf
      HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame
      pandas.read_hdf(path_or_buf,key =None,** kwargs)
      从h5文件当中读取数据
      path_or_buffer:文件路径
      key:读取的键
      return:Theselected object
      DataFrame.to_hdf(path_or_buf, key, \kwargs)
  • JSON

    • read_json
      pandas.read_json(path_or_buf=None, orient=None, typ=‘frame’, lines=False)
    • to_json
      DataFrame.to_json(path_or_buf=None, orient=None, lines=False)
      将Pandas 对象存储为json格式
      path_or_buf=None:文件地址
      orient:存储的json形式,{‘split’,’records’,’index’,’columns’,’values’}
      lines:一个对象存储为一行

7 缺失值处理

  • isnull、notnull判断是否存在缺失值【知道】
    np.any(pd.isnull(movie)) # 里面如果有一个缺失值,就返回True
    np.all(pd.notnull(movie)) # 里面如果有一个缺失值,就返回False
  • dropna删除np.nan标记的缺失值【知道】
    movie.dropna()
  • fillna填充缺失值【知道】
    movie[i].fillna(value=movie[i].mean(), inplace=True)
  • replace替换具体某些值【知道】
    wis.replace(to_replace="?", value=np.NaN)

8离散化处理

  • 为什么要离散化
    连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。
  • 什么是数据的离散化
    连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数 值代表落在每个子区间中的属性值。
  • pd.qcut(data, q):
    对数据进行分组将数据分组,一般会与value_counts搭配使用,统计每组的个数
    series.value_counts():统计分组次数
  • onehot编码把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1.其又被称为热编码。
    pandas.get_dummies(data, prefix=None)
    data:array-like, Series, or DataFrame
    prefix:分组名字

9合并

  • pd.concat实现数据合并
    pd.concat([data1, data2], axis=1)
    按照行或列进行合并,axis=0为列索引,axis=1为行索引
  • pd.merge
    pd.merge(left, right, how=‘inner’, on=None)
    可以指定按照两组数据的共同键值对合并或者左右各自
    left: DataFrame
    right: 另一个DataFrame
    on: 指定的共同键
    how:按照什么方式连接
  • Merge method SQL Join Name Description
    left LEFT OUTER JOIN Use keys from left frame only
    right RIGHT OUTER JOIN Use keys from right frame only
    outer FULL OUTER JOIN Use union of keys from both frames
    inner INNER JOIN Use intersection of keys from both frames

10 交叉表与透视表

  • 交叉表:交叉表用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表)
    pd.crosstab(value1, value2)
  • 透视表:透视表是将原有的DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数,指定某一列对另一列的关系
    data.pivot_table()
    DataFrame.pivot_table([], index=[])

11分组聚合

  • DataFrame.groupby(key, as_index=False)
    key:分组的列数据,可以多个

XMind: ZEN - Trial Version

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值