-
Orca
Orca
在DolphinDB
上实现了Pandas API
。因为先有
DolphinDB
与Pandas
,后有Orca
,Dol
的底层都已经写好了,导致Orca
在实现Pandas
时限于底层架构,会与Pandas
有些细节差异。 -
数据类型的差异
DolphinDB Pandas 备注 整数字面量 默认解析为 32
位INT
类型默认解析为64位 DolphinDB
支持CHAR
、SHORT
、INT
、LONG
等不同字节数的整数类型字符串类型 - STRING
可以进行max
,min
等比较运算;
-SYMBOL
不允许,类似pandas
中category
的功能底层存储是 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_csv
和read_table
下表展示
Orca
的read_csv
与Pandas
的read_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):
Orca Pandas 备注 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
)或np
的dtype
(np.bool
,np.int8
,np.float32
,etc
.)sep
/delimiter
不支持 支持对正则表达式的解析 partitioned
True
:允许分区方式将数据导入(实际上是调用DolphinDB
的ploadText函数);False
:强制以非分区的方式导入数据(实际上是调用DolphinDB
的loadText函数)bool
类型,具体见Orca分区表的特殊差异。db_handle
,table_name
以及partition_columns
用于在导入数据的时通过指定 DolphinDB
的数据库和表等相关信息,将数据导入到DolphinDB
的分区表具体用法与示例请参见Orca分区表的特殊差异。(包括 read_table
函数) -
Series、DataFrame的差异
-
Series和DataFrame的创建与修改
Pandas Orca 备注 创建 允许在定义一个 Series
时不设置name
参数,或者使用数字作为name
相当于在 DolphinDB server
端新建一个只含有一列的表,而表的列名则不允许为空值
且不能使用数字
。
因此,在创建Orca
的Series
而不指定名字时,系统会默认为该Series
自动生成一个名字,当然,用户不会感知到自动生成的名字,只是会看到Orca
抛出的WARNING
信息。修改 向下取整 四舍五入取整 将一个精度更高的数据类型的值赋值给一个精度更低的Series 追加数据 允许通过直接访问一个不存在的index去增加新的行 不允许 -
Series和DataFrame的四则运算
Pandas Orca 备注 空值的处理 任何数与空值比较,返回都是False,这其实是Python中NaN比较的规则 将空值视为该类型的最小值 空字符串的处理 字符串会区分NaN值和空字符串 空字符串就是NaN 零的处理 非零数除以零得到同符号的无穷大;零除以零得到NaN 任何数除以零得到NULL -
Series和DataFrame的属性与方法
Pandas Orca 备注 Attributes and underlying data 唯一没有支持的属性就是 memory_usage
Conversion 由于 Orca
的优势在于对批量数据读写与计算,因此目前在Conversion
方面的功能并不完善,现在仅支持Series.to_numpy
这一功能Indexing, iteration 见下表 关于
Indexing
,iteration
,orca.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方面的事情)
-
通过
loc
访问Series
和DataFrame
Orca
暂不支持通过loc
去访问带有DatetimeIndex
的Series
和DataFrame
。当
DataFrame
的表中有重复的index
时,pandas
不支持以重复的index
值为slice
的下界,而Orca
则以第一个出现的重复值为slice
的下界输出结果。 -
通过
loc
与iloc
修改Series
和DataFrame
中值的类型pandas
可以通过loc
和iloc
更改DataFrame中一个列(Series)的类型。更改其中一个值的类型会导致整列类型变更,也可以直接通过调用astype
函数更改整列的类型。而Orca不允许修改列的类型。 -
通过
loc
与iloc
修改Series
和DataFrame
中的值Orca
不支持:当index
有重复的列,通过一个DataFrame
以index
对齐的原则去修改另一个DataFrame
的值 -
通过
loc
向DataFrame
新增一行或者一列pandas
支持直接通过loc
访问不存在的index
或者columns
来新增行或者列,而Orca
暂不支持。 -
loc
与iloc
暂不支持对MultiIndex
的访问
-
-
Binary operator functions
除了combine和combine_first函数之外,Orca支持pandas提供的所有二元函数。
- 二元运算函数的axis参数
- 除数是负数
- 求余运算
-
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
参数。在排序中,Orca
将NaN
值视为最小值处理。 -
Serialization / IO / conversion
Orca支持pandas所支持的所有序列化相关函数,并提供一个
to_pandas
函数,该函数将一个Orca对象转化为pandas的对象。
-
-
Index Objects的差异
Orca目前支持的Index类型有Index,Int64Index,DatetimeIndex和MultiIndex,下面介绍Index对象所支持的属性和方法。
-
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
函数,该函数目前支持的参数如下:参数 说明 rule DateOffset,可以是字符串或者是dateoffset对象 on 时间列,采用该列进行重采样 level 字符串或整数,对于MultiIndex,采用level指定的列进行重采样 Orca支持的DateOffset如下:
Date Offset Frequency 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分区表的概念。
read_csv
函数read_table
函数
-
Orca分区表的特殊差异
在DolphinDB中,分区表与内存表存在着一些差异,在Orca中,分区表的操作也存在这诸多限制。
all
,any
和median
函数- 对非整数类型的index重复选择
- 以DataFrame的index为基准对齐设置某一列的值
-
-
References
DolphinDB基础概念理解:Orca与Pandas的差异
最新推荐文章于 2024-06-24 18:17:03 发布