DolphinDB基础概念理解:Orca与Pandas的差异

  • Orca

    OrcaDolphinDB上实现了Pandas API

    DolphinDB基础概念理解:Orca

    DolphinDB使用案例21:orca入门及底层实现

    因为先有DolphinDBPandas,后有OrcaDol的底层都已经写好了,导致Orca在实现Pandas时限于底层架构,会与Pandas有些细节差异。

  • 数据类型的差异

    DolphinDBPandas备注
    整数字面量默认解析为32INT类型默认解析为64位DolphinDB支持CHARSHORTINTLONG等不同字节数的整数类型
    字符串类型- STRING 可以进行maxmin等比较运算;
    - SYMBOL 不允许,类似pandascategory的功能
    底层存储是np.object
    经过优化的category类型,使用整数作为底层存储,对于取值范围有限的数据,能减少内存占用。
    pandas允许将任何数据类型的数据转换为category类型,而DolphinDB只允许字符串类型。
    日期和时间类型DATE
    MINUTE;
    SECOND;
    TIME;
    NANOTIME;
    np.datetime64[ns],以freq表示时间单位
    同一列数据类型同一列中元素的数据类型必须相同允许一个Series中的数据有不同数据类型DolphinDB中字符串类型的NULL值实际上是一个空字符串,而pandas中字符串类型的空值是np.NaN
  • 通用函数的差异

    Orca提供以下通用函数:

    函数描述
    connect将会话连接到DolphinDB服务器
    merge连接两个DataFrame
    concat按照columns对齐连接两个DataFrame
    date_range创建时间序列
    to_datetime将字符串转换成时间类型
    isna判断是否是空值
    isnull判断是否是空值
    notna判断是否不是空值
    notnull判断是否不是空值
  • Input/Output的差异

    Orca现在支持的Input/output函数有:read_csvread_table

    下表展示Orcaread_csvPandasread_csv函数的差异:

    # engine = 'dolphindb'前提下的参数可能
    read_csv(path, sep=',', delimiter=None, names=None,  index_col=None,engine='dolphindb', usecols=None, squeeze=False, prefix=None, dtype=None, partitioned=True, db_handle=None, table_name=None, partition_columns=None, *args, **kwargs):
    
    OrcaPandas备注
    engine{’c’,默认在python客户端目录下寻找要导入的文件
    python’, 默认在python客户端目录下寻找要导入的文件
    dolphindb’默认在DolphinDB服务端目录下寻找要导入的文件}
    {’c’,’python’}当engine参数设置为‘python’或者‘c’时,Orca的read_csv函数相当于调用了pandas的read_csv函数进行导入。下面列出的差异均是在engine参数设置为‘dolphindb’的前提下的差异。
    dtype还支持以字符串的方式指定DolphinDB的提供的所有数据类型,包括所有时间类型和字符串类型该参数接收一个字典,键是列名,值是Python原生类型(bool, int, float, str)或npdtypenp.bool, np.int8, np.float32, etc.)
    sep/delimiter不支持支持对正则表达式的解析
    partitionedTrue:允许分区方式将数据导入(实际上是调用DolphinDBploadText函数);
    False:强制以非分区的方式导入数据(实际上是调用DolphinDBloadText函数)
    bool类型,具体见Orca分区表的特殊差异
    db_handle, table_name以及partition_columns用于在导入数据的时通过指定DolphinDB的数据库和表等相关信息,将数据导入到DolphinDB的分区表具体用法与示例请参见Orca分区表的特殊差异。(包括read_table函数)
  • Series、DataFrame的差异

    • Series和DataFrame的创建与修改
      PandasOrca备注
      创建允许在定义一个Series时不设置name参数,或者使用数字作为name相当于在DolphinDB server端新建一个只含有一列的表,而表的列名则不允许为空值且不能使用数字
      因此,在创建OrcaSeries而不指定名字时,系统会默认为该Series自动生成一个名字,当然,用户不会感知到自动生成的名字,只是会看到Orca抛出的WARNING信息。
      修改向下取整四舍五入取整将一个精度更高的数据类型的值赋值给一个精度更低的Series
      追加数据允许通过直接访问一个不存在的index去增加新的行不允许
    • Series和DataFrame的四则运算
      PandasOrca备注
      空值的处理任何数与空值比较,返回都是False,这其实是Python中NaN比较的规则将空值视为该类型的最小值
      空字符串的处理字符串会区分NaN值和空字符串空字符串就是NaN
      零的处理非零数除以零得到同符号的无穷大;零除以零得到NaN任何数除以零得到NULL
    • Series和DataFrame的属性与方法
      PandasOrca备注
      Attributes and underlying data唯一没有支持的属性就是memory_usage
      Conversion由于Orca的优势在于对批量数据读写与计算,因此目前在Conversion方面的功能并不完善,现在仅支持Series.to_numpy这一功能
      Indexing, iteration见下表

      关于Indexing, iterationorca.DataFrame对象orca.Series对象支持以下函数:

      函数描述
      head返回前n个值
      tail返回最后n个值
      loc通过index访问
      iloc通过下标访问
      where用NaN填充不符合过滤条件的值
      mask用NaN填充符合过滤条件的值

      orca.DataFrame对象还具备以下函数:

      函数描述
      items遍历DataFrame
      iteritems遍历DataFrame
      lookup根据标签查询数据
      get访问某一列
    • loc与iloc(本质上属于indexing方面的事情)
      1. 通过loc访问SeriesDataFrame

        Orca暂不支持通过loc去访问带有DatetimeIndexSeriesDataFrame

        DataFrame的表中有重复的index时,pandas不支持以重复的index值为slice的下界,而Orca则以第一个出现的重复值slice的下界输出结果。

      2. 通过lociloc修改SeriesDataFrame中值的类型

        pandas可以通过lociloc更改DataFrame中一个列(Series)的类型。更改其中一个值的类型会导致整列类型变更,也可以直接通过调用astype函数更改整列的类型。而Orca不允许修改列的类型。

      3. 通过lociloc修改SeriesDataFrame中的值

        Orca不支持:当index有重复的列,通过一个DataFrameindex对齐的原则去修改另一个DataFrame的值

      4. 通过locDataFrame新增一行或者一列

        pandas支持直接通过loc访问不存在的index或者columns来新增行或者列,而Orca暂不支持。

      5. lociloc暂不支持对MultiIndex的访问

    • Binary operator functions

      除了combinecombine_first函数之外,Orca支持pandas提供的所有二元函数

      1. 二元运算函数的axis参数
      2. 除数是负数
      3. 求余运算
    • Function application, GroupBy & window

      以下函数可用于orca.DataFrame对象和orca.Series对象:

      函数描述
      apply应用多个函数
      agg应用多个聚合函数
      aggregate应用多个聚合函数
      groupby分组运算
      rolling滑动窗口
      ewm指数加成滑动
    • Computations/descriptive stats的差异

      以下函数可用于orca.DataFrame对象和orca.Series对象:

      函数描述
      abs绝对值
      all判断是否为空
      any判断是否为空
      clip返回介于阈值之间的值
      clip_lower返回大于下界的值
      clip_upper返回小于上界的值
      corr相关性
      count非空元素的个数
      cov协方差
      cummax累计最大值
      cummin累计最小值
      cumprod累乘
      cumsum累加
      kurt倾斜度
      kurtosis峰度
      mad平均绝对利差
      max最大值
      mean平均值
      median中位数
      min最小值
      mode众数
      pct_change百分比变化率
      prod返回乘积
      product返回乘积
      quantile分位数
      rank排名
      round规整
      sem无偏标准差
      skew无偏斜
      std标准差
      sum求和
      var方差
      nunique返回非重复值的个数

      orca.Series对象还具备以下函数:

      函数描述
      between返回介于阈值之间的值
      unique返回不重复的值
      is_unique判断是否有重复的值
      is_monotonic判断是否单调
      is_monotonic_increasing判断是否单调递增
      is_monotonic_decreasing判断是否单调递减
    • Reindexing/selection/label manipulation的差异

      以下函数可用于orca.DataFrame对象和orca.Series对象:

      函数描述
      drop_duplicates删除重复的值
      duplicated判断是否重复
      first返回第一个值
      head返回前n个值
      idxmax返回index的最大值
      idxmin返回index的最小值
      last返回最后一个值
      rename重命名
      tail返回最后n个值

      orca.DataFrame对象还具有以下函数:

      函数描述
      drop删除某列
      reindex重置index
      reset_index重置index
      set_index设置index
    • Reshaping, sorting

      Orca目前支持sort_values函数,该函数仅支持ascending参数。在排序中,OrcaNaN值视为最小值处理。

    • Serialization / IO / conversion

      Orca支持pandas所支持的所有序列化相关函数,并提供一个to_pandas函数,该函数将一个Orca对象转化为pandas的对象。

  • Index Objects的差异

    Orca目前支持的Index类型有Index,Int64Index,DatetimeIndex和MultiIndex,下面介绍Index对象所支持的属性和方法。

    • Index的属性

      Orca的Index对象具有以下属性:

      属性描述
      values返回取值
      is_monotonic判断是否单调
      is_monotonic_increasing判断是否单调递增
      is_monotonic_decreasing判断是否单调递减
      is_unique判断是否有重复的值
      hasnans判断是否有空值
      dtype返回数据类型
      shape返回形状
      name返回名字
      nbytes返回字节数
      ndim返回维度
      size返回大小
      T返回转置
    • Modifying and computations

      Orca的Index对象支持以下函数:

      函数描述
      max最大值
      min最小值
  • GroupBy的差异

    Orca的groupby函数目前仅支持by参数,且只能对DataFrame进行groupby。

    以下函数可用于orca.DataFrameGroupBy对象:

    函数描述
    all判断是否为空
    any判断是否为空
    bfill向后填充
    count非空元素的个数
    cumcount累计非空元素的个数
    cummax累计最大值
    cummin累计最小值
    cumprod累乘
    cumsum累加
    ffill向前填充
    first返回第一个元素
    last返回最后一个元素
    mad平均绝对利差
    max最大值
    mean平均值
    median中位数
    min最小值
    ohlc忽略空值求和
    pct_change百分比变化率
    resample重采样
    size元素个数
    sem无偏标准差
    skew无偏斜
    std标准差
    sum求和
    var方差
  • Resampling的差异

    Orca支持resample函数,该函数目前支持的参数如下:

    参数说明
    ruleDateOffset,可以是字符串或者是dateoffset对象
    on时间列,采用该列进行重采样
    level字符串或整数,对于MultiIndex,采用level指定的列进行重采样

    Orca支持的DateOffset如下:

    Date OffsetFrequency String
    BDay or BusinessDay‘B’
    WeekOfMonth‘WOM’
    LastWeekOfMonth‘LWOM’
    MonthEnd‘M’
    MonthBegin‘MS’
    BMonthEnd or BusinessMonthEnd‘BM’
    BMonthBegin or BusinessMonthBegin‘BMS’
    SemiMonthEnd‘SM’
    SemiMonthBegin‘SMS’
    QuarterEnd‘Q’
    QuarterBegin‘QS’
    BQuarterEnd‘BQ’
    BQuarterBegin‘BQS’
    FY5253Quarter‘REQ’
    YearEnd‘A’
    YearBegin‘AS’ or ‘BYS’
    BYearEnd‘BA’
    BYearBegin‘BAS’
    FY5253‘RE’
    Day‘D’
    Hour‘H’
    Minute‘T’ or ‘min’
    Second‘S’
    Milli‘L’ or ‘ms’
    Micro‘U’ or ‘us’
    Nano‘N’
  • Orca分区表的特殊差异

    • Orca的分区表

      pandas作为全内存计算的分析工具,无法解决当数据量过大时带来的内存不足,计算效率低下等问题。DolphinDB是一个分布式时序数据库,并且内置了丰富的计算和分析功能。它可以将TB级的海量数据存储在多台物理机器上,充分利用CPU,对海量数据进行高性能分析计算。

      Orca作为基于DolphinDB开发的分布式pandas接口,其最大的优势就是在语法和pandas保持一致的前提下很好地解决了pandas的瓶颈:大数据场景下的性能问题。而这一问题的解决,则依赖于DolphinDB分区表。在Orca中,我们也引入Orca分区表的概念。

      1. read_csv函数
      2. read_table函数
    • Orca分区表的特殊差异

      在DolphinDB中,分区表与内存表存在着一些差异,在Orca中,分区表的操作也存在这诸多限制。

      1. allanymedian函数
      2. 对非整数类型的index重复选择
      3. 以DataFrame的index为基准对齐设置某一列的值
  • References

  1. Github >> Orca与pandas的差异
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值