Series

Series 是 DolphinDB pandas 中最常用的数据结构之一。它是一维标签化的数组,每个 Series 都由两个主要部分组成:数据和索引。数据部分包含存储在 Series 中的实际值,而索引部分是用于标识和访问这些值的标签。它可以保存不同类型的数据,如数值、字符串、布尔值等。其构造如下:

构造函数

Series(data=None, index=None, lazy=False)
  • data: 可以是 Python list, DolphinDB Vector, pandas Series 或空值,必须是强类型。

  • index:可以是 Python list, DolphinDB Vector, pandas Series, 单层索引或空值,必须是强类型。暂不支持多层级索引。

  • lazy:可选参数,为一个布尔值,默认为 True。表示是否创建一个惰性的 Series。惰性 Series 是原对象的一个视图,计算操作不会立即执行;非惰性 Series 是原对象的一个拷贝,计算操作会立即执行。

注意

  • 暂不支持 data 指定为分区表的列。
  • data 为空,在创建 Series 时,会自动填充为 None,类型为 DOUBLE。
  • data 指定为 Series,则不能指定 index
  • lazy = True 时,index 不能包含元素全部是 None 的 list,例如:[None,None]。

使用前说明:

  • Series 类中函数的 dtype 参数只能指定为 DolphinDB 的数据类型,例如:ddb.DOUBLE, ddb.STRING。
  • 目前 DolphinDB 支持的 Series 中的部分函数仅支持了部分参数,必须通过 keywords 方式传参。举例说明:DolphinDB 的 Series.groupby 函数仅支持 bydropna 参数,其参数调用方式为:Series.groupby(by=["a", "a", "b", "b"], dropna=False)

属性

Axis

支持的 axis 属性见下表:

方法描述兼容性说明
Series.indexSeries 的索引(axis 标签)。不支持多层索引
Series.values返回 DolphinDB 的向量。

转换

目前支持以下函数:

方法描述兼容性说明
Series.astype(dtype[])将 pandas 对象转换为指定的 dtype。暂不支持 copyerrors 参数。
Series.copy()复制该对象的索引和数据。暂不支持 deep 参数。
Series.bool()返回由布尔类型标量组成的 Series 的布尔值。
Series.to_list()返回值的列表。

索引、迭代

目前支持以下函数:

方法描述兼容性说明
Series.get(key)从给定键的对象中获取数据。对 Series 使用 get(None) 或 get(ddb.NULL) 时将返回 None。
Series.at访问标签对应的单个值。对 Series 使用 at[i]=val 修改数据时,如果 val 与原 Series 的类型不同,将会尝试类型转换。若无法转换,则报错。 通过 at 获取惰性 Series 的返回值仍是一个 Series。
Series.iat按整数位置访问标签对应的单个值。同上
Series.loc通过标签或布尔数组访问一组行和列。同上
Series.iloc仅基于整数位置的索引以按位置选择。同上
Series.keys()返回索引的别名。
Series.pop(item)从 Series 中删除数据,并将它返回。
Series.item()返回由标量组成的 Series 的数据
Series.xs(key[, axis, level, drop_level])返回 Series 指定横截面(cross-section)的数据。

二元运算符函数

支持 Python pandas.Series 中的所有二元运算符函数。但需要注意以下几点:

  • 所有函数均不支持 level 参数。
  • 所有函数中的 other 参数仅支持 scalar, DolphinDB vector, list, Series 四种数据类型,不支持 DataFrame。
  • eq 函数的 other 参数是 scalar,则不能指定 fill_value 参数。
  • combine 函数中 func 参数仅支持内置函数,不支持用户自定义函数。

函数应用、GroupBy 和窗口

以下函数的 func 参数只能是 pandas 内置函数、自定义函数(包括 lambda 表达式)。暂不支持 **kwargs 参数。

方法兼容性说明
Series.apply(func[, args])不支持参数 convert_dtype
Series.agg(func)不支持参数 axis
Series.aggregate(func)不支持参数 axis
Series.transform(func)不支持参数 axis
Series.groupby(by,dropna=True)不支持参数 axis, level, as_index, sort, group_keys, squeeze, observed
rolling不支持参数 center, win_type, on, axis, closed, step, method
ewm不支持参数 ignore, axis, times, method
map不支持指定 arg 参数为 Series

计算/描述性统计

已经支持 Computations / descriptive stats 中的以下函数:abs, all, any, autocorr, between, corr, count, cov, diff, kurt, kurtosis, mad, max, mean, median, min, mode, nlargest, nsmallest, prod, sem, skew, std, sum, var, unique, nunique, is_unique, is_monotonic_increasing, is_monotonic_decreasing, value_counts

注意

  • 所有函数均不支持 axis, skipna, bool_only, fill_value, min_count, ddof 参数。
  • count, mad, max, mean, median, min, prod, skew, sum, sem, std, var 函数外,其它函数均不支持 level 参数。
  • 此外,部分函数暂时还不支持某些参数,详见下表:
method兼容性说明
corr不支持参数 method, min_periods
cov不支持参数 min_period, ddof
diff不支持参数 periods
kurt不支持参数所有参数
kurtosis不支持参数所有参数
std不支持参数 ddof
value_counts不支持参数 bins

重新索引/选择/标签操作

目前支持 Reindexing / selection / label manipulation 中的以下函数:drop, drop_duplicates, first, head, idxmax, idxmin, isin, last, reindex, reset_index。部分函数暂时还不支持某些参数,详见下表:

method兼容性说明
drop不支持参数 axis, columns, inplace, errors
drop_duplicates不支持参数 inplace, ignore_index
idxmax/idxmin不支持参数 axis
reindex不支持参数 copy, level, tolerance
reset_index不支持参数 inplace, allow_duplicates
head不允许参数 n = 0
take不支持参数 axis

缺失数据处理

目前支持 Missing data handling 中的以下函数:backfill, isnull, notnull, pad

注意:所有函数均不支持 axisdowncast, inplace, limit 参数。

重塑、排序

目前支持 Reshaping, sorting 中的以下函数:argsort, argmin, argmax, sort_values, sort_index 函数。

注意:所有函数都不支持 axis 参数。部分函数不支持某些参数,详见下表:

method兼容性说明
argsort不支持参数 kind, na_position
sort_values/sort_index不支持参数 inplace, kind, na_position

组合/比较/连接/合并

已经支持 Combining / comparing / joining / merging 中的函数。部分函数不支持某些参数,详见下表:

method兼容性说明
compare仅支持 align_axis =1
update

时间序列相关

已经支持 Time Series-related 中的大部分函数。暂不支持 tz_converttz_localize 函数。部分已支持的函数的兼容性,详见下表:

method兼容性说明
asfreq不支持参数 method, how, normalize, fill_value
asof不支持参数 subset
shift不支持参数 axis, 参数 freq 仅支持 asfreq 中列出的规则
resample不支持参数 on, loffset, base, group_keys
at_time不支持参数 asof, axis
between_time不支持参数 include_start, include_end, axis

创建 Series

  • 不指定 index,则索引值从 0 开始。
s = pd.Series([20, 21, 12])
print(s)
// output:
0  20
1  21
2  12
dtype: INT
  • 指定单列索引
pd.Series([20, 21, 12], ['London', 'New York', 'Helsinki'])
print(s)
// output:
  London  20
New York  21
Helsinki  12
dtype: INT

访问 Series

city = ['London', 'New York', 'Helsinki']
s = pd.Series([20, 21, 12], city)

(1)隐式访问

  • 访问单个元素
s[0] 
s.iloc[0] 
s.iat[0]
// output: 20
  • 访问多行
s[[0,2]]
s.iloc[[0,2]]
// output:
London     20
Helsinki   12
dtype: INT
  • 切片访问
s[0:3]
s.iloc[0:3]
// output:
  London  20
New York  21
Helsinki  12
dtype: INT
s[:2]
s.iloc[:2]
// output:
  London  20
New York  21
dtype: INT
s[1:]
s.iloc[1:]
// output:
New York  21
Helsinki  12
dtype: INT
s[:]
s.iloc[:]
// output:
  London  20
New York  21
Helsinki  12
dtype: INT

(2)显式访问

  • 单标签访问单个元素
s['London']
s.loc['London']
// output:20
  • 单标签访问多个元素
s[['London', 'New York']]
s.loc[['London', 'New York']]
// output:
  kind  
  A  20
  B  21
dtype: INT
  • 切片访问
s['London':'Helsinki']
s.loc['London':'Helsinki']
// output:
    city  kind
  London     A  20
New York     B  21
Helsinki     A  12
dtype: INT
s[:]
s.loc[:]
// output:
    city  kind
  London     A  20
New York     B  21
Helsinki     A  12
dtype: INT

注意:暂不支持多标签访问时,通过切片访问全元素

s[:, 'A']
s.loc[:, 'A']

更新 Series

(1)追加数据

暂不支持。

(2)更新数据

  • 直接修改元素:支持通过索引修改,暂不支持通过下标修改。

    s.loc["London"] = 33
    s[1] = 33 # supported
  • 通过 update 函数更新数据

city = ['London', 'New York', 'Helsinki']
s = pd.Series([20, 21, 12], city)
s.update(pd.Series([50,60], index=['London', 'Helsinki']))
s

// output
  London  50
New York  21
Helsinki  60
dtype: INT

(3) 删除 Series 数据

  • drop
s.drop(["London"])

Series 间的运算

  • 基础的运算规则:索引值对齐后进行运算。例如:如果 s1 中没有对应 s 的索引,则计算结果为 NaN。
s=pd.Series([12, 15],["London","New York"])
city = ['London', 'Helsinki']
s1 = pd.Series([33, 25], city) 
s + s1
// output:
Helsinki  NaN
  London   45
New York  NaN
dtype: INT