Class: Polars::Series
- Inherits:
-
Object
- Object
- Polars::Series
- Defined in:
- lib/polars/series.rb
Overview
A Series represents a single column in a polars DataFrame.
Instance Method Summary collapse
-
#! ⇒ Series
Performs boolean not.
-
#!=(other) ⇒ Series
Not equal.
-
#%(other) ⇒ Series
Returns the modulo.
-
#&(other) ⇒ Series
Bitwise AND.
-
#*(other) ⇒ Series
Performs multiplication.
-
#**(power) ⇒ Series
Raises to the power of exponent.
-
#+(other) ⇒ Series
Performs addition.
-
#-(other) ⇒ Series
Performs subtraction.
-
#-@ ⇒ Series
Performs negation.
-
#/(other) ⇒ Series
Performs division.
-
#<(other) ⇒ Series
Less than.
-
#<=(other) ⇒ Series
Less than or equal.
-
#==(other) ⇒ Series
Equal.
-
#>(other) ⇒ Series
Greater than.
-
#>=(other) ⇒ Series
Greater than or equal.
-
#[](item) ⇒ Object
Returns elements of the Series.
-
#[]=(key, value) ⇒ Object
Sets an element of the Series.
-
#^(other) ⇒ Series
Bitwise XOR.
-
#_hash(seed = 0, seed_1 = nil, seed_2 = nil, seed_3 = nil) ⇒ Series
Hash the Series.
-
#abs ⇒ Series
Compute absolute values.
-
#alias(name) ⇒ Series
Return a copy of the Series with a new alias/name.
-
#all?(&block) ⇒ Boolean
(also: #all)
Check if all boolean values in the column are
true. -
#any?(&block) ⇒ Boolean
(also: #any)
Check if any boolean value in the column is
true. -
#append(other, append_chunks: true) ⇒ Series
Append a Series to this one.
-
#apply(return_dtype: nil, skip_nulls: true, &func) ⇒ Series
(also: #map)
Apply a custom/user-defined function (UDF) over elements in this Series and return a new Series.
-
#arccos ⇒ Series
(also: #acos)
Compute the element-wise value for the inverse cosine.
-
#arccosh ⇒ Series
(also: #acosh)
Compute the element-wise value for the inverse hyperbolic cosine.
-
#arcsin ⇒ Series
(also: #asin)
Compute the element-wise value for the inverse sine.
-
#arcsinh ⇒ Series
(also: #asinh)
Compute the element-wise value for the inverse hyperbolic sine.
-
#arctan ⇒ Series
(also: #atan)
Compute the element-wise value for the inverse tangent.
-
#arctanh ⇒ Series
(also: #atanh)
Compute the element-wise value for the inverse hyperbolic tangent.
-
#arg_max ⇒ Integer?
Get the index of the maximal value.
-
#arg_min ⇒ Integer?
Get the index of the minimal value.
-
#arg_sort(reverse: false, nulls_last: false) ⇒ Series
Get the index values that would sort this Series.
-
#arg_true ⇒ Series
Get index values where Boolean Series evaluate
true. -
#arg_unique ⇒ Series
Get unique index as Series.
-
#argsort(reverse: false, nulls_last: false) ⇒ Series
Get the index values that would sort this Series.
-
#arr ⇒ ArrayNameSpace
Create an object namespace of all array related methods.
-
#bin ⇒ BinaryNameSpace
Create an object namespace of all binary related methods.
-
#bottom_k(k: 5) ⇒ Boolean
Return the
ksmallest elements. -
#cast(dtype, strict: true) ⇒ Series
Cast between data types.
-
#cat ⇒ CatNameSpace
Create an object namespace of all categorical related methods.
-
#ceil ⇒ Series
Rounds up to the nearest integer value.
-
#chunk_lengths ⇒ Array
Get the length of each individual chunk.
-
#cleared ⇒ Series
Create an empty copy of the current Series.
-
#clip(min_val, max_val) ⇒ Series
Clip (limit) the values in an array to a
minandmaxboundary. -
#clip_max(max_val) ⇒ Series
Clip (limit) the values in an array to a
maxboundary. -
#clip_min(min_val) ⇒ Series
Clip (limit) the values in an array to a
minboundary. -
#cos ⇒ Series
Compute the element-wise value for the cosine.
-
#cosh ⇒ Series
Compute the element-wise value for the hyperbolic cosine.
-
#count ⇒ Integer
Return the number of elements in the Series.
-
#cummax(reverse: false) ⇒ Series
Get an array with the cumulative max computed at every element.
-
#cummin(reverse: false) ⇒ Series
Get an array with the cumulative min computed at every element.
-
#cumprod(reverse: false) ⇒ Series
Get an array with the cumulative product computed at every element.
-
#cumsum(reverse: false) ⇒ Series
Get an array with the cumulative sum computed at every element.
-
#cumulative_eval(expr, min_periods: 1, parallel: false) ⇒ Series
Run an expression over a sliding window that increases
1slot every iteration. -
#cut(breaks, labels: nil, left_closed: false, include_breaks: false) ⇒ Series
Bin continuous values into discrete categories.
-
#describe ⇒ DataFrame
Quick summary statistics of a series.
-
#diff(n: 1, null_behavior: "ignore") ⇒ Series
Calculate the n-th discrete difference.
-
#dot(other) ⇒ Numeric
Compute the dot/inner product between two Series.
-
#drop_nans ⇒ Series
Drop NaN values.
-
#drop_nulls ⇒ Series
Create a new Series that copies data from this Series without null values.
-
#dt ⇒ DateTimeNameSpace
Create an object namespace of all datetime related methods.
-
#dtype ⇒ Symbol
Get the data type of this Series.
-
#each ⇒ Object
Returns an enumerator.
-
#entropy(base: Math::E, normalize: false) ⇒ Float?
Computes the entropy.
-
#equals(other, null_equal: false, strict: false) ⇒ Boolean
(also: #series_equal)
Check if series is equal with another Series.
-
#estimated_size(unit = "b") ⇒ Numeric
Return an estimation of the total (heap) allocated size of the Series.
-
#ewm_mean(com: nil, span: nil, half_life: nil, alpha: nil, adjust: true, min_periods: 1) ⇒ Series
Exponentially-weighted moving average.
-
#ewm_std(com: nil, span: nil, half_life: nil, alpha: nil, adjust: true, bias: false, min_periods: 1) ⇒ Series
Exponentially-weighted moving standard deviation.
-
#ewm_var(com: nil, span: nil, half_life: nil, alpha: nil, adjust: true, bias: false, min_periods: 1) ⇒ Series
Exponentially-weighted moving variance.
-
#exp ⇒ Series
Compute the exponential, element-wise.
-
#explode ⇒ Series
Explode a list or utf8 Series.
-
#extend_constant(value, n) ⇒ Series
Extend the Series with given number of values.
-
#fill_nan(fill_value) ⇒ Series
Fill floating point NaN value with a fill value.
-
#fill_null(value = nil, strategy: nil, limit: nil) ⇒ Series
Fill null values using the specified value or strategy.
-
#filter(predicate) ⇒ Series
Filter elements by a boolean mask.
-
#flags ⇒ Hash
Get flags that are set on the Series.
-
#floor ⇒ Series
Rounds down to the nearest integer value.
-
#has_validity ⇒ Boolean
Return
trueif the Series has a validity bitmask. -
#head(n = 10) ⇒ Series
Get the first
nrows. -
#initialize(name = nil, values = nil, dtype: nil, strict: true, nan_to_null: false, dtype_if_empty: nil) ⇒ Series
constructor
Create a new Series.
-
#inner_dtype ⇒ Symbol
Get the inner dtype in of a List typed Series.
-
#interpolate(method: "linear") ⇒ Series
Interpolate intermediate values.
-
#is_boolean ⇒ Boolean
(also: #boolean?, #is_bool, #bool?)
Check if this Series is a Boolean.
-
#is_datelike ⇒ Boolean
(also: #datelike?, #is_temporal, #temporal?)
Check if this Series datatype is datelike.
-
#is_duplicated ⇒ Series
Get mask of all duplicated values.
-
#is_empty ⇒ Boolean
(also: #empty?)
Check if the Series is empty.
-
#is_finite ⇒ Series
Returns a boolean Series indicating which values are finite.
-
#is_first ⇒ Series
Get a mask of the first unique value.
-
#is_float ⇒ Boolean
(also: #float?)
Check if this Series has floating point numbers.
-
#is_in(other) ⇒ Series
(also: #in?)
Check if elements of this Series are in the other Series.
-
#is_infinite ⇒ Series
Returns a boolean Series indicating which values are infinite.
-
#is_nan ⇒ Series
Returns a boolean Series indicating which values are NaN.
-
#is_not_nan ⇒ Series
Returns a boolean Series indicating which values are not NaN.
-
#is_not_null ⇒ Series
Returns a boolean Series indicating which values are not null.
-
#is_null ⇒ Series
Returns a boolean Series indicating which values are null.
-
#is_numeric ⇒ Boolean
(also: #numeric?)
Check if this Series datatype is numeric.
-
#is_unique ⇒ Series
Get mask of all unique values.
-
#is_utf8 ⇒ Boolean
(also: #utf8?)
Check if this Series datatype is a Utf8.
-
#kurtosis(fisher: true, bias: true) ⇒ Float?
Compute the kurtosis (Fisher or Pearson) of a dataset.
-
#len ⇒ Integer
(also: #length, #size)
Return the number of elements in the Series.
-
#limit(n = 10) ⇒ Series
Get the first
nrows. -
#list ⇒ ListNameSpace
Create an object namespace of all list related methods.
-
#log(base = Math::E) ⇒ Series
Compute the logarithm to a given base.
-
#log10 ⇒ Series
Compute the base 10 logarithm of the input array, element-wise.
-
#max ⇒ Object
Get the maximum value in this Series.
-
#mean ⇒ Float?
Reduce this Series to the mean value.
-
#median ⇒ Float?
Get the median of this Series.
-
#min ⇒ Object
Get the minimal value in this Series.
-
#mode ⇒ Series
Compute the most occurring value(s).
-
#n_chunks ⇒ Integer
Get the number of chunks that this Series contains.
-
#n_unique ⇒ Integer
Count the number of unique values in this Series.
-
#name ⇒ String
Get the name of this Series.
-
#nan_max ⇒ Object
Get maximum value, but propagate/poison encountered NaN values.
-
#nan_min ⇒ Object
Get minimum value, but propagate/poison encountered NaN values.
-
#new_from_index(index, length) ⇒ Series
Create a new Series filled with values from the given index.
-
#none?(&block) ⇒ Boolean
(also: #none)
Check if all boolean values in the column are
false. -
#null_count ⇒ Integer
Count the null values in this Series.
-
#pct_change(n: 1) ⇒ Series
Computes percentage change between values.
-
#peak_max ⇒ Series
Get a boolean mask of the local maximum peaks.
-
#peak_min ⇒ Series
Get a boolean mask of the local minimum peaks.
-
#product ⇒ Numeric
Reduce this Series to the product value.
-
#qcut(quantiles, labels: nil, left_closed: false, allow_duplicates: false, include_breaks: false) ⇒ Series
Bin continuous values into discrete categories based on their quantiles.
-
#quantile(quantile, interpolation: "nearest") ⇒ Float?
Get the quantile value of this Series.
-
#rank(method: "average", reverse: false) ⇒ Series
Assign ranks to data, dealing with ties appropriately.
-
#rechunk(in_place: false) ⇒ Series
Create a single chunk of memory for this Series.
-
#reinterpret(signed: true) ⇒ Series
Reinterpret the underlying bits as a signed/unsigned integer.
-
#rename(name, in_place: false) ⇒ Series
Rename this Series.
-
#reshape(dims) ⇒ Series
Reshape this Series to a flat Series or a Series of Lists.
-
#reverse ⇒ Series
Return Series in reverse order.
-
#rle ⇒ Series
Get the lengths of runs of identical values.
-
#rle_id ⇒ Series
Map values to run IDs.
-
#rolling_max(window_size, weights: nil, min_periods: nil, center: false) ⇒ Series
Apply a rolling max (moving max) over the values in this array.
-
#rolling_mean(window_size, weights: nil, min_periods: nil, center: false) ⇒ Series
Apply a rolling mean (moving mean) over the values in this array.
-
#rolling_median(window_size, weights: nil, min_periods: nil, center: false, warn_if_unsorted: true) ⇒ Series
Compute a rolling median.
-
#rolling_min(window_size, weights: nil, min_periods: nil, center: false) ⇒ Series
Apply a rolling min (moving min) over the values in this array.
-
#rolling_quantile(quantile, interpolation: "nearest", window_size: 2, weights: nil, min_periods: nil, center: false, warn_if_unsorted: true) ⇒ Series
Compute a rolling quantile.
-
#rolling_skew(window_size, bias: true) ⇒ Series
Compute a rolling skew.
-
#rolling_std(window_size, weights: nil, min_periods: nil, center: false, ddof: 1, warn_if_unsorted: true) ⇒ Series
Compute a rolling std dev.
-
#rolling_sum(window_size, weights: nil, min_periods: nil, center: false) ⇒ Series
Apply a rolling sum (moving sum) over the values in this array.
-
#rolling_var(window_size, weights: nil, min_periods: nil, center: false, ddof: 1, warn_if_unsorted: true) ⇒ Series
Compute a rolling variance.
-
#round(decimals = 0) ⇒ Series
Round underlying floating point data by
decimalsdigits. -
#sample(n: nil, frac: nil, with_replacement: false, shuffle: false, seed: nil) ⇒ Series
Sample from this Series.
-
#scatter(idx, value) ⇒ Series
(also: #set_at_idx)
Set values at the index locations.
-
#search_sorted(element, side: "any") ⇒ Integer
Find indices where elements should be inserted to maintain order.
-
#set(filter, value) ⇒ Series
Set masked values.
-
#set_sorted(reverse: false) ⇒ Series
Flags the Series as sorted.
-
#shape ⇒ Array
Shape of this Series.
-
#shift(periods = 1) ⇒ Series
Shift the values by a given period.
-
#shift_and_fill(periods, fill_value) ⇒ Series
Shift the values by a given period and fill the resulting null values.
-
#shrink_dtype ⇒ Series
Shrink numeric columns to the minimal required datatype.
-
#shrink_to_fit(in_place: false) ⇒ Series
Shrink Series memory usage.
-
#shuffle(seed: nil) ⇒ Series
Shuffle the contents of this Series.
-
#sign ⇒ Series
Compute the element-wise indication of the sign.
-
#sin ⇒ Series
Compute the element-wise value for the sine.
-
#sinh ⇒ Series
Compute the element-wise value for the hyperbolic sine.
-
#skew(bias: true) ⇒ Float?
Compute the sample skewness of a data set.
-
#slice(offset, length = nil) ⇒ Series
Get a slice of this Series.
-
#sort(reverse: false, in_place: false) ⇒ Series
Sort this Series.
-
#sqrt ⇒ Series
Compute the square root of the elements.
-
#std(ddof: 1) ⇒ Float?
Get the standard deviation of this Series.
-
#str ⇒ StringNameSpace
Create an object namespace of all string related methods.
-
#struct ⇒ StructNameSpace
Create an object namespace of all struct related methods.
-
#sum ⇒ Numeric
Reduce this Series to the sum value.
-
#tail(n = 10) ⇒ Series
Get the last
nrows. -
#take(indices) ⇒ Series
Take values by index.
-
#take_every(n) ⇒ Series
Take every nth value in the Series and return as new Series.
-
#tan ⇒ Series
Compute the element-wise value for the tangent.
-
#tanh ⇒ Series
Compute the element-wise value for the hyperbolic tangent.
-
#time_unit ⇒ String
Get the time unit of underlying Datetime Series as
"ns","us", or"ms". -
#to_a ⇒ Array
Convert this Series to a Ruby Array.
-
#to_dummies(separator: "_", drop_first: false) ⇒ DataFrame
Get dummy variables.
-
#to_frame ⇒ DataFrame
Cast this Series to a DataFrame.
-
#to_numo ⇒ Numo::NArray
Convert this Series to a Numo array.
-
#to_physical ⇒ Series
Cast to physical representation of the logical dtype.
-
#to_s ⇒ String
(also: #inspect)
Returns a string representing the Series.
-
#top_k(k: 5) ⇒ Boolean
Return the
klargest elements. -
#unique(maintain_order: false) ⇒ Series
(also: #uniq)
Get unique elements in series.
-
#unique_counts ⇒ Series
Return a count of the unique values in the order of appearance.
-
#value_counts(sort: false) ⇒ DataFrame
Count the unique values in a Series.
-
#var(ddof: 1) ⇒ Float?
Get variance of this Series.
-
#zip_with(mask, other) ⇒ Series
Take values from self or other based on the given mask.
-
#|(other) ⇒ Series
Bitwise OR.
Constructor Details
#initialize(name = nil, values = nil, dtype: nil, strict: true, nan_to_null: false, dtype_if_empty: nil) ⇒ Series
Create a new Series.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/polars/series.rb', line 35 def initialize(name = nil, values = nil, dtype: nil, strict: true, nan_to_null: false, dtype_if_empty: nil) # Handle case where values are passed as the first argument if !name.nil? && !name.is_a?(::String) if values.nil? values = name name = nil else raise ArgumentError, "Series name must be a string." end end name = "" if name.nil? # TODO improve if values.is_a?(Range) && values.begin.is_a?(::String) values = values.to_a end if values.nil? self._s = sequence_to_rbseries(name, [], dtype: dtype, dtype_if_empty: dtype_if_empty) elsif values.is_a?(Series) self._s = series_to_rbseries(name, values) elsif values.is_a?(Range) self._s = Polars.arange( values.first, values.last + (values.exclude_end? ? 0 : 1), step: 1, eager: true, dtype: dtype ) .rename(name, in_place: true) ._s elsif values.is_a?(::Array) self._s = sequence_to_rbseries(name, values, dtype: dtype, strict: strict, dtype_if_empty: dtype_if_empty) elsif defined?(Numo::NArray) && values.is_a?(Numo::NArray) self._s = numo_to_rbseries(name, values, strict: strict, nan_to_null: nan_to_null) if !dtype.nil? self._s = self.cast(dtype, strict: true)._s end else raise ArgumentError, "Series constructor called with unsupported type; got #{values.class.name}" end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Polars::ExprDispatch
Instance Method Details
#! ⇒ Series
Performs boolean not.
282 283 284 285 286 287 |
# File 'lib/polars/series.rb', line 282 def ! if dtype == Boolean return Utils.wrap_s(_s.not) end raise NotImplementedError end |
#!=(other) ⇒ Series
Not equal.
185 186 187 |
# File 'lib/polars/series.rb', line 185 def !=(other) _comp(other, :neq) end |
#%(other) ⇒ Series
Returns the modulo.
262 263 264 265 266 267 |
# File 'lib/polars/series.rb', line 262 def %(other) if is_datelike raise ArgumentError, "first cast to integer before applying modulo on datelike dtypes" end _arithmetic(other, :rem) end |
#&(other) ⇒ Series
Bitwise AND.
148 149 150 151 152 153 |
# File 'lib/polars/series.rb', line 148 def &(other) if !other.is_a?(Series) other = Series.new([other]) end Utils.wrap_s(_s.bitand(other._s)) end |
#*(other) ⇒ Series
Performs multiplication.
234 235 236 237 238 239 240 241 242 |
# File 'lib/polars/series.rb', line 234 def *(other) if is_temporal raise ArgumentError, "first cast to integer before multiplying datelike dtypes" elsif other.is_a?(DataFrame) other * self else _arithmetic(other, :mul) end end |
#**(power) ⇒ Series
Raises to the power of exponent.
272 273 274 275 276 277 |
# File 'lib/polars/series.rb', line 272 def **(power) if is_datelike raise ArgumentError, "first cast to integer before raising datelike dtypes to a power" end to_frame.select(Polars.col(name).pow(power)).to_series end |
#+(other) ⇒ Series
Performs addition.
220 221 222 |
# File 'lib/polars/series.rb', line 220 def +(other) _arithmetic(other, :add) end |
#-(other) ⇒ Series
Performs subtraction.
227 228 229 |
# File 'lib/polars/series.rb', line 227 def -(other) _arithmetic(other, :sub) end |
#-@ ⇒ Series
Performs negation.
292 293 294 |
# File 'lib/polars/series.rb', line 292 def -@ 0 - self end |
#/(other) ⇒ Series
Performs division.
247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/polars/series.rb', line 247 def /(other) if is_temporal raise ArgumentError, "first cast to integer before dividing datelike dtypes" end if is_float return _arithmetic(other, :div) end cast(Float64) / other end |
#<(other) ⇒ Series
Less than.
199 200 201 |
# File 'lib/polars/series.rb', line 199 def <(other) _comp(other, :lt) end |
#<=(other) ⇒ Series
Less than or equal.
213 214 215 |
# File 'lib/polars/series.rb', line 213 def <=(other) _comp(other, :lt_eq) end |
#==(other) ⇒ Series
Equal.
178 179 180 |
# File 'lib/polars/series.rb', line 178 def ==(other) _comp(other, :eq) end |
#>(other) ⇒ Series
Greater than.
192 193 194 |
# File 'lib/polars/series.rb', line 192 def >(other) _comp(other, :gt) end |
#>=(other) ⇒ Series
Greater than or equal.
206 207 208 |
# File 'lib/polars/series.rb', line 206 def >=(other) _comp(other, :gt_eq) end |
#[](item) ⇒ Object
Returns elements of the Series.
310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 |
# File 'lib/polars/series.rb', line 310 def [](item) if item.is_a?(Series) && [UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64].include?(item.dtype) return Utils.wrap_s(_s.take_with_series(_pos_idxs(item)._s)) end if item.is_a?(Series) && item.bool? return filter(item) end if item.is_a?(Integer) if item < 0 item = len + item end return _s.get_idx(item) end if item.is_a?(Range) return Slice.new(self).apply(item) end if Utils.is_int_sequence(item) return Utils.wrap_s(_s.take_with_series(_pos_idxs(Series.new("", item))._s)) end raise ArgumentError, "Cannot get item of type: #{item.class.name}" end |
#[]=(key, value) ⇒ Object
Sets an element of the Series.
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 |
# File 'lib/polars/series.rb', line 341 def []=(key, value) if value.is_a?(::Array) if is_numeric || is_datelike scatter(key, value) return end raise ArgumentError, "cannot set Series of dtype: #{dtype} with list/tuple as value; use a scalar value" end if key.is_a?(Series) if key.dtype == Boolean self._s = set(key, value)._s elsif key.dtype == UInt64 self._s = scatter(key.cast(UInt32), value)._s elsif key.dtype == UInt32 self._s = scatter(key, value)._s else raise Todo end elsif key.is_a?(::Array) s = Utils.wrap_s(sequence_to_rbseries("", key, dtype: UInt32)) self[s] = value elsif key.is_a?(Range) s = Series.new("", key, dtype: UInt32) self[s] = value elsif key.is_a?(Integer) self[[key]] = value else raise ArgumentError, "cannot use #{key} for indexing" end end |
#^(other) ⇒ Series
Bitwise XOR.
168 169 170 171 172 173 |
# File 'lib/polars/series.rb', line 168 def ^(other) if !other.is_a?(Series) other = Series.new([other]) end Utils.wrap_s(_s.bitxor(other._s)) end |
#_hash(seed = 0, seed_1 = nil, seed_2 = nil, seed_3 = nil) ⇒ Series
Hash the Series.
The hash value is of type :u64.
3459 3460 3461 |
# File 'lib/polars/series.rb', line 3459 def _hash(seed = 0, seed_1 = nil, seed_2 = nil, seed_3 = nil) super end |
#abs ⇒ Series
Compute absolute values.
3500 3501 3502 |
# File 'lib/polars/series.rb', line 3500 def abs super end |
#alias(name) ⇒ Series
Return a copy of the Series with a new alias/name.
1060 1061 1062 1063 1064 |
# File 'lib/polars/series.rb', line 1060 def alias(name) s = dup s._s.rename(name) s end |
#all?(&block) ⇒ Boolean Also known as: all
Check if all boolean values in the column are true.
426 427 428 429 430 431 432 |
# File 'lib/polars/series.rb', line 426 def all?(&block) if block_given? apply(&block).all? else to_frame.select(Polars.col(name).all).to_series[0] end end |
#any?(&block) ⇒ Boolean Also known as: any
Check if any boolean value in the column is true.
414 415 416 417 418 419 420 |
# File 'lib/polars/series.rb', line 414 def any?(&block) if block_given? apply(&block).any? else to_frame.select(Polars.col(name).any).to_series[0] end end |
#append(other, append_chunks: true) ⇒ Series
Append a Series to this one.
1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 |
# File 'lib/polars/series.rb', line 1313 def append(other, append_chunks: true) begin if append_chunks _s.append(other._s) else _s.extend(other._s) end rescue => e if e. == "Already mutably borrowed" append(other.clone, append_chunks) else raise e end end self end |
#apply(return_dtype: nil, skip_nulls: true, &func) ⇒ Series Also known as: map
Apply a custom/user-defined function (UDF) over elements in this Series and return a new Series.
If the function returns another datatype, the return_dtype arg should be set, otherwise the method will fail.
2747 2748 2749 2750 2751 2752 2753 2754 |
# File 'lib/polars/series.rb', line 2747 def apply(return_dtype: nil, skip_nulls: true, &func) if return_dtype.nil? pl_return_dtype = nil else pl_return_dtype = Utils.rb_type_to_dtype(return_dtype) end Utils.wrap_s(_s.apply_lambda(func, pl_return_dtype, skip_nulls)) end |
#arccos ⇒ Series Also known as: acos
Compute the element-wise value for the inverse cosine.
2573 2574 2575 |
# File 'lib/polars/series.rb', line 2573 def arccos super end |
#arccosh ⇒ Series Also known as: acosh
Compute the element-wise value for the inverse hyperbolic cosine.
2634 2635 2636 |
# File 'lib/polars/series.rb', line 2634 def arccosh super end |
#arcsin ⇒ Series Also known as: asin
Compute the element-wise value for the inverse sine.
2553 2554 2555 |
# File 'lib/polars/series.rb', line 2553 def arcsin super end |
#arcsinh ⇒ Series Also known as: asinh
Compute the element-wise value for the inverse hyperbolic sine.
2613 2614 2615 |
# File 'lib/polars/series.rb', line 2613 def arcsinh super end |
#arctan ⇒ Series Also known as: atan
Compute the element-wise value for the inverse tangent.
2593 2594 2595 |
# File 'lib/polars/series.rb', line 2593 def arctan super end |
#arctanh ⇒ Series Also known as: atanh
Compute the element-wise value for the inverse hyperbolic tangent.
2658 2659 2660 |
# File 'lib/polars/series.rb', line 2658 def arctanh super end |
#arg_max ⇒ Integer?
Get the index of the maximal value.
1578 1579 1580 |
# File 'lib/polars/series.rb', line 1578 def arg_max _s.arg_max end |
#arg_min ⇒ Integer?
Get the index of the minimal value.
1566 1567 1568 |
# File 'lib/polars/series.rb', line 1566 def arg_min _s.arg_min end |
#arg_sort(reverse: false, nulls_last: false) ⇒ Series
Get the index values that would sort this Series.
1521 1522 1523 |
# File 'lib/polars/series.rb', line 1521 def arg_sort(reverse: false, nulls_last: false) super end |
#arg_true ⇒ Series
Get index values where Boolean Series evaluate true.
1854 1855 1856 |
# File 'lib/polars/series.rb', line 1854 def arg_true Polars.arg_where(self, eager: true) end |
#arg_unique ⇒ Series
Get unique index as Series.
1554 1555 1556 |
# File 'lib/polars/series.rb', line 1554 def arg_unique super end |
#argsort(reverse: false, nulls_last: false) ⇒ Series
Get the index values that would sort this Series.
Alias for #arg_sort.
1535 1536 1537 |
# File 'lib/polars/series.rb', line 1535 def argsort(reverse: false, nulls_last: false) super end |
#arr ⇒ ArrayNameSpace
Create an object namespace of all array related methods.
3870 3871 3872 |
# File 'lib/polars/series.rb', line 3870 def arr ArrayNameSpace.new(self) end |
#bin ⇒ BinaryNameSpace
Create an object namespace of all binary related methods.
3877 3878 3879 |
# File 'lib/polars/series.rb', line 3877 def bin BinaryNameSpace.new(self) end |
#bottom_k(k: 5) ⇒ Boolean
Return the k smallest elements.
1495 1496 1497 |
# File 'lib/polars/series.rb', line 1495 def bottom_k(k: 5) super end |
#cast(dtype, strict: true) ⇒ Series
Cast between data types.
2001 2002 2003 |
# File 'lib/polars/series.rb', line 2001 def cast(dtype, strict: true) super end |
#cat ⇒ CatNameSpace
Create an object namespace of all categorical related methods.
3884 3885 3886 |
# File 'lib/polars/series.rb', line 3884 def cat CatNameSpace.new(self) end |
#ceil ⇒ Series
Rounds up to the nearest integer value.
Only works on floating point Series.
2392 2393 2394 |
# File 'lib/polars/series.rb', line 2392 def ceil super end |
#chunk_lengths ⇒ Array
Get the length of each individual chunk.
1102 1103 1104 |
# File 'lib/polars/series.rb', line 1102 def chunk_lengths _s.chunk_lengths end |
#cleared ⇒ Series
Create an empty copy of the current Series.
The copy has identical name/dtype but no data.
2273 2274 2275 |
# File 'lib/polars/series.rb', line 2273 def cleared len > 0 ? limit(0) : clone end |
#clip(min_val, max_val) ⇒ Series
Clip (limit) the values in an array to a min and max boundary.
Only works for numerical types.
If you want to clip other dtypes, consider writing a "when, then, otherwise" expression. See LazyFunctions#when for more information.
3684 3685 3686 |
# File 'lib/polars/series.rb', line 3684 def clip(min_val, max_val) super end |
#clip_max(max_val) ⇒ Series
Clip (limit) the values in an array to a max boundary.
Only works for numerical types.
If you want to clip other dtypes, consider writing a "when, then, otherwise" expression. See LazyFunctions#when for more information.
3714 3715 3716 |
# File 'lib/polars/series.rb', line 3714 def clip_max(max_val) super end |
#clip_min(min_val) ⇒ Series
Clip (limit) the values in an array to a min boundary.
Only works for numerical types.
If you want to clip other dtypes, consider writing a "when, then, otherwise" expression. See LazyFunctions#when for more information.
3699 3700 3701 |
# File 'lib/polars/series.rb', line 3699 def clip_min(min_val) super end |
#cos ⇒ Series
Compute the element-wise value for the cosine.
2515 2516 2517 |
# File 'lib/polars/series.rb', line 2515 def cos super end |
#cosh ⇒ Series
Compute the element-wise value for the hyperbolic cosine.
2697 2698 2699 |
# File 'lib/polars/series.rb', line 2697 def cosh super end |
#count ⇒ Integer
Return the number of elements in the Series.
1961 1962 1963 1964 1965 |
# File 'lib/polars/series.rb', line 1961 def count warn "`Series#count` will exclude null values in 0.9.0. Use `Series#length` instead." # len - null_count len end |
#cummax(reverse: false) ⇒ Series
Get an array with the cumulative max computed at every element.
1191 1192 1193 |
# File 'lib/polars/series.rb', line 1191 def cummax(reverse: false) super end |
#cummin(reverse: false) ⇒ Series
Get an array with the cumulative min computed at every element.
1169 1170 1171 |
# File 'lib/polars/series.rb', line 1169 def cummin(reverse: false) super end |
#cumprod(reverse: false) ⇒ Series
Dtypes :i8, :u8, :i16, and :u16 are cast to
:i64 before multiplying to prevent overflow issues.
Get an array with the cumulative product computed at every element.
1217 1218 1219 |
# File 'lib/polars/series.rb', line 1217 def cumprod(reverse: false) super end |
#cumsum(reverse: false) ⇒ Series
Dtypes :i8, :u8, :i16, and :u16 are cast to
:i64 before summing to prevent overflow issues.
Get an array with the cumulative sum computed at every element.
1147 1148 1149 |
# File 'lib/polars/series.rb', line 1147 def cumsum(reverse: false) super end |
#cumulative_eval(expr, min_periods: 1, parallel: false) ⇒ Series
This functionality is experimental and may change without it being considered a breaking change.
This can be really slow as it can have O(n^2) complexity. Don't use this
for operations that visit all elements.
Run an expression over a sliding window that increases 1 slot every iteration.
1046 1047 1048 |
# File 'lib/polars/series.rb', line 1046 def cumulative_eval(expr, min_periods: 1, parallel: false) super end |
#cut(breaks, labels: nil, left_closed: false, include_breaks: false) ⇒ Series
Bin continuous values into discrete categories.
784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 |
# File 'lib/polars/series.rb', line 784 def cut(breaks, labels: nil, left_closed: false, include_breaks: false) result = ( to_frame .select( Polars.col(name).cut( breaks, labels: labels, left_closed: left_closed, include_breaks: include_breaks ) ) .to_series ) if include_breaks result = result.struct.rename_fields(["break_point", "category"]) end result end |
#describe ⇒ DataFrame
Quick summary statistics of a series.
Series with mixed datatypes will return summary statistics for the datatype of the first value.
531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 |
# File 'lib/polars/series.rb', line 531 def describe if len == 0 raise ArgumentError, "Series must contain at least one value" elsif is_numeric s = cast(:f64) stats = { "min" => s.min, "max" => s.max, "null_count" => s.null_count, "mean" => s.mean, "std" => s.std, "count" => s.len } elsif is_boolean stats = { "sum" => sum, "null_count" => null_count, "count" => len } elsif is_utf8 stats = { "unique" => unique.length, "null_count" => null_count, "count" => len } elsif is_datelike # we coerce all to string, because a polars column # only has a single dtype and dates: datetime and count: int don't match stats = { "min" => dt.min.to_s, "max" => dt.max.to_s, "null_count" => null_count.to_s, "count" => len.to_s } else raise TypeError, "This type is not supported" end Polars::DataFrame.new( {"statistic" => stats.keys, "value" => stats.values} ) end |
#diff(n: 1, null_behavior: "ignore") ⇒ Series
Calculate the n-th discrete difference.
3568 3569 3570 |
# File 'lib/polars/series.rb', line 3568 def diff(n: 1, null_behavior: "ignore") super end |
#dot(other) ⇒ Numeric
Compute the dot/inner product between two Series.
2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 |
# File 'lib/polars/series.rb', line 2430 def dot(other) if !other.is_a?(Series) other = Series.new(other) end if len != other.len n, m = len, other.len raise ArgumentError, "Series length mismatch: expected #{n}, found #{m}" end _s.dot(other._s) end |
#drop_nans ⇒ Series
Drop NaN values.
481 482 483 |
# File 'lib/polars/series.rb', line 481 def drop_nans super end |
#drop_nulls ⇒ Series
Create a new Series that copies data from this Series without null values.
474 475 476 |
# File 'lib/polars/series.rb', line 474 def drop_nulls super end |
#dt ⇒ DateTimeNameSpace
Create an object namespace of all datetime related methods.
3891 3892 3893 |
# File 'lib/polars/series.rb', line 3891 def dt DateTimeNameSpace.new(self) end |
#dtype ⇒ Symbol
Get the data type of this Series.
91 92 93 |
# File 'lib/polars/series.rb', line 91 def dtype _s.dtype end |
#each ⇒ Object
Returns an enumerator.
299 300 301 302 303 304 305 |
# File 'lib/polars/series.rb', line 299 def each return to_enum(:each) unless block_given? length.times do |i| yield self[i] end end |
#entropy(base: Math::E, normalize: false) ⇒ Float?
Computes the entropy.
Uses the formula -sum(pk * log(pk) where pk are discrete probabilities.
1008 1009 1010 |
# File 'lib/polars/series.rb', line 1008 def entropy(base: Math::E, normalize: false) Polars.select(Polars.lit(self).entropy(base: base, normalize: normalize)).to_series[0] end |
#equals(other, null_equal: false, strict: false) ⇒ Boolean Also known as: series_equal
Check if series is equal with another Series.
1948 1949 1950 |
# File 'lib/polars/series.rb', line 1948 def equals(other, null_equal: false, strict: false) _s.equals(other._s, null_equal, strict) end |
#estimated_size(unit = "b") ⇒ Numeric
Return an estimation of the total (heap) allocated size of the Series.
Estimated size is given in the specified unit (bytes by default).
This estimation is the sum of the size of its buffers, validity, including nested arrays. Multiple arrays may share buffers and bitmaps. Therefore, the size of 2 arrays is not the sum of the sizes computed from this function. In particular, StructArray's size is an upper bound.
When an array is sliced, its allocated size remains constant because the buffer unchanged. However, this function will yield a smaller number. This is because this function returns the visible size of the buffer, not its total capacity.
FFI buffers are included in this estimation.
399 400 401 402 |
# File 'lib/polars/series.rb', line 399 def estimated_size(unit = "b") sz = _s.estimated_size Utils.scale_bytes(sz, to: unit) end |
#ewm_mean(com: nil, span: nil, half_life: nil, alpha: nil, adjust: true, min_periods: 1) ⇒ Series
Exponentially-weighted moving average.
3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 |
# File 'lib/polars/series.rb', line 3754 def ewm_mean( com: nil, span: nil, half_life: nil, alpha: nil, adjust: true, min_periods: 1 ) super end |
#ewm_std(com: nil, span: nil, half_life: nil, alpha: nil, adjust: true, bias: false, min_periods: 1) ⇒ Series
Exponentially-weighted moving standard deviation.
3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 |
# File 'lib/polars/series.rb', line 3768 def ewm_std( com: nil, span: nil, half_life: nil, alpha: nil, adjust: true, bias: false, min_periods: 1 ) super end |
#ewm_var(com: nil, span: nil, half_life: nil, alpha: nil, adjust: true, bias: false, min_periods: 1) ⇒ Series
Exponentially-weighted moving variance.
3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 |
# File 'lib/polars/series.rb', line 3783 def ewm_var( com: nil, span: nil, half_life: nil, alpha: nil, adjust: true, bias: false, min_periods: 1 ) super end |
#exp ⇒ Series
Compute the exponential, element-wise.
467 468 469 |
# File 'lib/polars/series.rb', line 467 def exp super end |
#explode ⇒ Series
Explode a list or utf8 Series.
This means that every item is expanded to a new row.
1925 1926 1927 |
# File 'lib/polars/series.rb', line 1925 def explode super end |
#extend_constant(value, n) ⇒ Series
Extend the Series with given number of values.
3818 3819 3820 |
# File 'lib/polars/series.rb', line 3818 def extend_constant(value, n) Utils.wrap_s(_s.extend_constant(value, n)) end |
#fill_nan(fill_value) ⇒ Series
Fill floating point NaN value with a fill value.
2298 2299 2300 |
# File 'lib/polars/series.rb', line 2298 def fill_nan(fill_value) super end |
#fill_null(value = nil, strategy: nil, limit: nil) ⇒ Series
Fill null values using the specified value or strategy.
2350 2351 2352 |
# File 'lib/polars/series.rb', line 2350 def fill_null(value = nil, strategy: nil, limit: nil) super end |
#filter(predicate) ⇒ Series
Filter elements by a boolean mask.
1348 1349 1350 1351 1352 1353 |
# File 'lib/polars/series.rb', line 1348 def filter(predicate) if predicate.is_a?(::Array) predicate = Series.new("", predicate) end Utils.wrap_s(_s.filter(predicate._s)) end |
#flags ⇒ Hash
Get flags that are set on the Series.
98 99 100 101 102 103 104 105 106 107 |
# File 'lib/polars/series.rb', line 98 def flags out = { "SORTED_ASC" => _s.is_sorted_flag, "SORTED_DESC" => _s.is_sorted_reverse_flag } if dtype.is_a?(List) out["FAST_EXPLODE"] = _s.can_fast_explode_flag end out end |
#floor ⇒ Series
Rounds down to the nearest integer value.
Only works on floating point Series.
2371 2372 2373 |
# File 'lib/polars/series.rb', line 2371 def floor Utils.wrap_s(_s.floor) end |
#has_validity ⇒ Boolean
Return true if the Series has a validity bitmask.
If there is none, it means that there are no null values. Use this to swiftly assert a Series does not have null values.
1653 1654 1655 |
# File 'lib/polars/series.rb', line 1653 def has_validity _s.has_validity end |
#head(n = 10) ⇒ Series
Get the first n rows.
1372 1373 1374 |
# File 'lib/polars/series.rb', line 1372 def head(n = 10) to_frame.select(Utils.col(name).head(n)).to_series end |
#inner_dtype ⇒ Symbol
Get the inner dtype in of a List typed Series.
112 113 114 |
# File 'lib/polars/series.rb', line 112 def inner_dtype _s.inner_dtype end |
#interpolate(method: "linear") ⇒ Series
Interpolate intermediate values. The interpolation method is linear.
3493 3494 3495 |
# File 'lib/polars/series.rb', line 3493 def interpolate(method: "linear") super end |
#is_boolean ⇒ Boolean Also known as: boolean?, is_bool, bool?
Check if this Series is a Boolean.
2123 2124 2125 |
# File 'lib/polars/series.rb', line 2123 def is_boolean dtype == Boolean end |
#is_datelike ⇒ Boolean Also known as: datelike?, is_temporal, temporal?
Check if this Series datatype is datelike.
2095 2096 2097 |
# File 'lib/polars/series.rb', line 2095 def is_datelike [Date, Time].include?(dtype) || dtype.is_a?(Datetime) || dtype.is_a?(Duration) end |
#is_duplicated ⇒ Series
Get mask of all duplicated values.
1901 1902 1903 |
# File 'lib/polars/series.rb', line 1901 def is_duplicated super end |
#is_empty ⇒ Boolean Also known as: empty?
Check if the Series is empty.
1665 1666 1667 |
# File 'lib/polars/series.rb', line 1665 def is_empty len == 0 end |
#is_finite ⇒ Series
Returns a boolean Series indicating which values are finite.
1725 1726 1727 |
# File 'lib/polars/series.rb', line 1725 def is_finite super end |
#is_first ⇒ Series
Get a mask of the first unique value.
1881 1882 1883 |
# File 'lib/polars/series.rb', line 1881 def is_first super end |
#is_float ⇒ Boolean Also known as: float?
Check if this Series has floating point numbers.
2110 2111 2112 |
# File 'lib/polars/series.rb', line 2110 def is_float [Float32, Float64].include?(dtype) end |
#is_in(other) ⇒ Series Also known as: in?
Check if elements of this Series are in the other Series.
1836 1837 1838 |
# File 'lib/polars/series.rb', line 1836 def is_in(other) super end |
#is_infinite ⇒ Series
Returns a boolean Series indicating which values are infinite.
1744 1745 1746 |
# File 'lib/polars/series.rb', line 1744 def is_infinite super end |
#is_nan ⇒ Series
Returns a boolean Series indicating which values are NaN.
1764 1765 1766 |
# File 'lib/polars/series.rb', line 1764 def is_nan super end |
#is_not_nan ⇒ Series
Returns a boolean Series indicating which values are not NaN.
1784 1785 1786 |
# File 'lib/polars/series.rb', line 1784 def is_not_nan super end |
#is_not_null ⇒ Series
Returns a boolean Series indicating which values are not null.
1706 1707 1708 |
# File 'lib/polars/series.rb', line 1706 def is_not_null super end |
#is_null ⇒ Series
Returns a boolean Series indicating which values are null.
1686 1687 1688 |
# File 'lib/polars/series.rb', line 1686 def is_null super end |
#is_numeric ⇒ Boolean Also known as: numeric?
Check if this Series datatype is numeric.
2082 2083 2084 |
# File 'lib/polars/series.rb', line 2082 def is_numeric [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64].include?(dtype) end |
#is_unique ⇒ Series
Get mask of all unique values.
1874 1875 1876 |
# File 'lib/polars/series.rb', line 1874 def is_unique super end |
#is_utf8 ⇒ Boolean Also known as: utf8?
Check if this Series datatype is a Utf8.
2138 2139 2140 |
# File 'lib/polars/series.rb', line 2138 def is_utf8 dtype == String end |
#kurtosis(fisher: true, bias: true) ⇒ Float?
Compute the kurtosis (Fisher or Pearson) of a dataset.
Kurtosis is the fourth central moment divided by the square of the variance. If Fisher's definition is used, then 3.0 is subtracted from the result to give 0.0 for a normal distribution. If bias is false, then the kurtosis is calculated using k statistics to eliminate bias coming from biased moment estimators
3654 3655 3656 |
# File 'lib/polars/series.rb', line 3654 def kurtosis(fisher: true, bias: true) _s.kurtosis(fisher, bias) end |
#len ⇒ Integer Also known as: length, size
Return the number of elements in the Series.
1975 1976 1977 |
# File 'lib/polars/series.rb', line 1975 def len _s.len end |
#limit(n = 10) ⇒ Series
Get the first n rows.
Alias for #head.
1240 1241 1242 |
# File 'lib/polars/series.rb', line 1240 def limit(n = 10) to_frame.select(Utils.col(name).limit(n)).to_series end |
#list ⇒ ListNameSpace
Create an object namespace of all list related methods.
3863 3864 3865 |
# File 'lib/polars/series.rb', line 3863 def list ListNameSpace.new(self) end |
#log(base = Math::E) ⇒ Series
Compute the logarithm to a given base.
453 454 455 |
# File 'lib/polars/series.rb', line 453 def log(base = Math::E) super end |
#log10 ⇒ Series
Compute the base 10 logarithm of the input array, element-wise.
460 461 462 |
# File 'lib/polars/series.rb', line 460 def log10 super end |
#max ⇒ Object
Get the maximum value in this Series.
629 630 631 |
# File 'lib/polars/series.rb', line 629 def max _s.max end |
#mean ⇒ Float?
Reduce this Series to the mean value.
598 599 600 |
# File 'lib/polars/series.rb', line 598 def mean _s.mean end |
#median ⇒ Float?
Get the median of this Series.
695 696 697 |
# File 'lib/polars/series.rb', line 695 def median _s.median end |
#min ⇒ Object
Get the minimal value in this Series.
617 618 619 |
# File 'lib/polars/series.rb', line 617 def min _s.min end |
#mode ⇒ Series
Compute the most occurring value(s).
Can return multiple Values.
2456 2457 2458 |
# File 'lib/polars/series.rb', line 2456 def mode super end |
#n_chunks ⇒ Integer
Get the number of chunks that this Series contains.
1121 1122 1123 |
# File 'lib/polars/series.rb', line 1121 def n_chunks _s.n_chunks end |
#n_unique ⇒ Integer
Count the number of unique values in this Series.
3412 3413 3414 |
# File 'lib/polars/series.rb', line 3412 def n_unique _s.n_unique end |
#name ⇒ String
Get the name of this Series.
119 120 121 |
# File 'lib/polars/series.rb', line 119 def name _s.name end |
#nan_max ⇒ Object
Get maximum value, but propagate/poison encountered NaN values.
636 637 638 |
# File 'lib/polars/series.rb', line 636 def nan_max to_frame.select(Polars.col(name).nan_max)[0, 0] end |
#nan_min ⇒ Object
Get minimum value, but propagate/poison encountered NaN values.
643 644 645 |
# File 'lib/polars/series.rb', line 643 def nan_min to_frame.select(Polars.col(name).nan_min)[0, 0] end |
#new_from_index(index, length) ⇒ Series
Create a new Series filled with values from the given index.
3846 3847 3848 |
# File 'lib/polars/series.rb', line 3846 def new_from_index(index, length) Utils.wrap_s(_s.new_from_index(index, length)) end |
#none?(&block) ⇒ Boolean Also known as: none
Check if all boolean values in the column are false.
438 439 440 441 442 443 444 |
# File 'lib/polars/series.rb', line 438 def none?(&block) if block_given? apply(&block).none? else to_frame.select(Polars.col(name).is_not.all).to_series[0] end end |
#null_count ⇒ Integer
Count the null values in this Series.
1643 1644 1645 |
# File 'lib/polars/series.rb', line 1643 def null_count _s.null_count end |
#pct_change(n: 1) ⇒ Series
Computes percentage change between values.
Percentage change (as fraction) between current element and most-recent
non-null element at least n period(s) before the current element.
Computes the change from the previous row by default.
3619 3620 3621 |
# File 'lib/polars/series.rb', line 3619 def pct_change(n: 1) super end |
#peak_max ⇒ Series
Get a boolean mask of the local maximum peaks.
3379 3380 3381 |
# File 'lib/polars/series.rb', line 3379 def peak_max super end |
#peak_min ⇒ Series
Get a boolean mask of the local minimum peaks.
3400 3401 3402 |
# File 'lib/polars/series.rb', line 3400 def peak_min super end |
#product ⇒ Numeric
Reduce this Series to the product value.
605 606 607 |
# File 'lib/polars/series.rb', line 605 def product to_frame.select(Polars.col(name).product).to_series[0] end |
#qcut(quantiles, labels: nil, left_closed: false, allow_duplicates: false, include_breaks: false) ⇒ Series
Bin continuous values into discrete categories based on their quantiles.
869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 |
# File 'lib/polars/series.rb', line 869 def qcut(quantiles, labels: nil, left_closed: false, allow_duplicates: false, include_breaks: false) result = ( to_frame .select( Polars.col(name).qcut( quantiles, labels: labels, left_closed: left_closed, allow_duplicates: allow_duplicates, include_breaks: include_breaks ) ) .to_series ) if include_breaks result = result.struct.rename_fields(["break_point", "category"]) end result end |
#quantile(quantile, interpolation: "nearest") ⇒ Float?
Get the quantile value of this Series.
712 713 714 |
# File 'lib/polars/series.rb', line 712 def quantile(quantile, interpolation: "nearest") _s.quantile(quantile, interpolation) end |
#rank(method: "average", reverse: false) ⇒ Series
Assign ranks to data, dealing with ties appropriately.
3556 3557 3558 |
# File 'lib/polars/series.rb', line 3556 def rank(method: "average", reverse: false) super end |
#rechunk(in_place: false) ⇒ Series
Create a single chunk of memory for this Series.
2050 2051 2052 2053 |
# File 'lib/polars/series.rb', line 2050 def rechunk(in_place: false) opt_s = _s.rechunk(in_place) in_place ? self : Utils.wrap_s(opt_s) end |
#reinterpret(signed: true) ⇒ Series
Reinterpret the underlying bits as a signed/unsigned integer.
This operation is only allowed for 64bit integers. For lower bits integers, you can safely use that cast operation.
3472 3473 3474 |
# File 'lib/polars/series.rb', line 3472 def reinterpret(signed: true) super end |
#rename(name, in_place: false) ⇒ Series
Rename this Series.
1078 1079 1080 1081 1082 1083 1084 1085 |
# File 'lib/polars/series.rb', line 1078 def rename(name, in_place: false) if in_place _s.rename(name) self else self.alias(name) end end |
#reshape(dims) ⇒ Series
Reshape this Series to a flat Series or a Series of Lists.
3725 3726 3727 |
# File 'lib/polars/series.rb', line 3725 def reshape(dims) super end |
#reverse ⇒ Series
Return Series in reverse order.
2070 2071 2072 |
# File 'lib/polars/series.rb', line 2070 def reverse super end |
#rle ⇒ Series
Get the lengths of runs of identical values.
912 913 914 |
# File 'lib/polars/series.rb', line 912 def rle super end |
#rle_id ⇒ Series
Map values to run IDs.
Similar to RLE, but it maps each value to an ID corresponding to the run into which it falls. This is especially useful when you want to define groups by runs of identical values rather than the values themselves.
940 941 942 |
# File 'lib/polars/series.rb', line 940 def rle_id super end |
#rolling_max(window_size, weights: nil, min_periods: nil, center: false) ⇒ Series
Apply a rolling max (moving max) over the values in this array.
A window of length window_size will traverse the array. The values that fill
this window will (optionally) be multiplied with the weights given by the
weight vector. The resulting values will be aggregated to their sum.
2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 |
# File 'lib/polars/series.rb', line 2928 def rolling_max( window_size, weights: nil, min_periods: nil, center: false ) to_frame .select( Polars.col(name).rolling_max( window_size, weights: weights, min_periods: min_periods, center: center ) ) .to_series end |
#rolling_mean(window_size, weights: nil, min_periods: nil, center: false) ⇒ Series
Apply a rolling mean (moving mean) over the values in this array.
A window of length window_size will traverse the array. The values that fill
this window will (optionally) be multiplied with the weights given by the
weight vector. The resulting values will be aggregated to their sum.
2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 |
# File 'lib/polars/series.rb', line 2978 def rolling_mean( window_size, weights: nil, min_periods: nil, center: false ) to_frame .select( Polars.col(name).rolling_mean( window_size, weights: weights, min_periods: min_periods, center: center ) ) .to_series end |
#rolling_median(window_size, weights: nil, min_periods: nil, center: false, warn_if_unsorted: true) ⇒ Series
Compute a rolling median.
3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 |
# File 'lib/polars/series.rb', line 3188 def rolling_median( window_size, weights: nil, min_periods: nil, center: false, warn_if_unsorted: true ) if min_periods.nil? min_periods = window_size end to_frame .select( Polars.col(name).rolling_median( window_size, weights: weights, min_periods: min_periods, center: center, warn_if_unsorted: warn_if_unsorted ) ) .to_series end |
#rolling_min(window_size, weights: nil, min_periods: nil, center: false) ⇒ Series
Apply a rolling min (moving min) over the values in this array.
A window of length window_size will traverse the array. The values that fill
this window will (optionally) be multiplied with the weights given by the
weight vector. The resulting values will be aggregated to their sum.
2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 |
# File 'lib/polars/series.rb', line 2878 def rolling_min( window_size, weights: nil, min_periods: nil, center: false ) to_frame .select( Polars.col(name).rolling_min( window_size, weights: weights, min_periods: min_periods, center: center ) ) .to_series end |
#rolling_quantile(quantile, interpolation: "nearest", window_size: 2, weights: nil, min_periods: nil, center: false, warn_if_unsorted: true) ⇒ Series
Compute a rolling quantile.
3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 |
# File 'lib/polars/series.rb', line 3259 def rolling_quantile( quantile, interpolation: "nearest", window_size: 2, weights: nil, min_periods: nil, center: false, warn_if_unsorted: true ) if min_periods.nil? min_periods = window_size end to_frame .select( Polars.col(name).rolling_quantile( quantile, interpolation: interpolation, window_size: window_size, weights: weights, min_periods: min_periods, center: center, warn_if_unsorted: warn_if_unsorted ) ) .to_series end |
#rolling_skew(window_size, bias: true) ⇒ Series
Compute a rolling skew.
3310 3311 3312 |
# File 'lib/polars/series.rb', line 3310 def rolling_skew(window_size, bias: true) super end |
#rolling_std(window_size, weights: nil, min_periods: nil, center: false, ddof: 1, warn_if_unsorted: true) ⇒ Series
Compute a rolling std dev.
A window of length window_size will traverse the array. The values that fill
this window will (optionally) be multiplied with the weights given by the
weight vector. The resulting values will be aggregated to their sum.
3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 |
# File 'lib/polars/series.rb', line 3079 def rolling_std( window_size, weights: nil, min_periods: nil, center: false, ddof: 1, warn_if_unsorted: true ) to_frame .select( Polars.col(name).rolling_std( window_size, weights: weights, min_periods: min_periods, center: center, ddof: ddof, warn_if_unsorted: warn_if_unsorted ) ) .to_series end |
#rolling_sum(window_size, weights: nil, min_periods: nil, center: false) ⇒ Series
Apply a rolling sum (moving sum) over the values in this array.
A window of length window_size will traverse the array. The values that fill
this window will (optionally) be multiplied with the weights given by the
weight vector. The resulting values will be aggregated to their sum.
3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 |
# File 'lib/polars/series.rb', line 3028 def rolling_sum( window_size, weights: nil, min_periods: nil, center: false ) to_frame .select( Polars.col(name).rolling_sum( window_size, weights: weights, min_periods: min_periods, center: center ) ) .to_series end |
#rolling_var(window_size, weights: nil, min_periods: nil, center: false, ddof: 1, warn_if_unsorted: true) ⇒ Series
Compute a rolling variance.
A window of length window_size will traverse the array. The values that fill
this window will (optionally) be multiplied with the weights given by the
weight vector. The resulting values will be aggregated to their sum.
3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 |
# File 'lib/polars/series.rb', line 3134 def rolling_var( window_size, weights: nil, min_periods: nil, center: false, ddof: 1, warn_if_unsorted: true ) to_frame .select( Polars.col(name).rolling_var( window_size, weights: weights, min_periods: min_periods, center: center, ddof: ddof, warn_if_unsorted: warn_if_unsorted ) ) .to_series end |
#round(decimals = 0) ⇒ Series
Round underlying floating point data by decimals digits.
2414 2415 2416 |
# File 'lib/polars/series.rb', line 2414 def round(decimals = 0) super end |
#sample(n: nil, frac: nil, with_replacement: false, shuffle: false, seed: nil) ⇒ Series
Sample from this Series.
3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 |
# File 'lib/polars/series.rb', line 3341 def sample( n: nil, frac: nil, with_replacement: false, shuffle: false, seed: nil ) if !n.nil? && !frac.nil? raise ArgumentError, "cannot specify both `n` and `frac`" end if n.nil? && !frac.nil? return Utils.wrap_s(_s.sample_frac(frac, with_replacement, shuffle, seed)) end if n.nil? n = 1 end Utils.wrap_s(_s.sample_n(n, with_replacement, shuffle, seed)) end |
#scatter(idx, value) ⇒ Series Also known as: set_at_idx
Set values at the index locations.
2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 |
# File 'lib/polars/series.rb', line 2235 def scatter(idx, value) if idx.is_a?(Integer) idx = [idx] end if idx.length == 0 return self end idx = Series.new("", idx) if value.is_a?(Integer) || value.is_a?(Float) || Utils.bool?(value) || value.is_a?(::String) || value.nil? value = Series.new("", [value]) # if we need to set more than a single value, we extend it if idx.length > 0 value = value.extend_constant(value[0], idx.length - 1) end elsif !value.is_a?(Series) value = Series.new("", value) end _s.scatter(idx._s, value._s) self end |
#search_sorted(element, side: "any") ⇒ Integer
Find indices where elements should be inserted to maintain order.
1588 1589 1590 1591 1592 1593 1594 |
# File 'lib/polars/series.rb', line 1588 def search_sorted(element, side: "any") if element.is_a?(Integer) || element.is_a?(Float) return Polars.select(Polars.lit(self).search_sorted(element, side: side)).item end element = Series.new(element) Polars.select(Polars.lit(self).search_sorted(element, side: side)).to_series end |
#set(filter, value) ⇒ Series
Use of this function is frequently an anti-pattern, as it can
block optimization (predicate pushdown, etc). Consider using
Polars.when(predicate).then(value).otherwise(self) instead.
Set masked values.
2211 2212 2213 |
# File 'lib/polars/series.rb', line 2211 def set(filter, value) Utils.wrap_s(_s.send("set_with_mask_#{DTYPE_TO_FFINAME.fetch(dtype)}", filter._s, value)) end |
#set_sorted(reverse: false) ⇒ Series
This can lead to incorrect results if this Series is not sorted!! Use with care!
Flags the Series as sorted.
Enables downstream code to user fast paths for sorted arrays.
3839 3840 3841 |
# File 'lib/polars/series.rb', line 3839 def set_sorted(reverse: false) Utils.wrap_s(_s.set_sorted(reverse)) end |
#shape ⇒ Array
Shape of this Series.
126 127 128 |
# File 'lib/polars/series.rb', line 126 def shape [_s.len] end |
#shift(periods = 1) ⇒ Series
Shift the values by a given period.
2786 2787 2788 |
# File 'lib/polars/series.rb', line 2786 def shift(periods = 1) super end |
#shift_and_fill(periods, fill_value) ⇒ Series
Shift the values by a given period and fill the resulting null values.
2798 2799 2800 |
# File 'lib/polars/series.rb', line 2798 def shift_and_fill(periods, fill_value) super end |
#shrink_dtype ⇒ Series
Shrink numeric columns to the minimal required datatype.
Shrink to the dtype needed to fit the extrema of this Series. This can be used to reduce memory pressure.
3856 3857 3858 |
# File 'lib/polars/series.rb', line 3856 def shrink_dtype super end |
#shrink_to_fit(in_place: false) ⇒ Series
Shrink Series memory usage.
Shrinks the underlying array capacity to exactly fit the actual data. (Note that this function does not change the Series data type).
3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 |
# File 'lib/polars/series.rb', line 3422 def shrink_to_fit(in_place: false) if in_place _s.shrink_to_fit self else series = clone series._s.shrink_to_fit series end end |
#shuffle(seed: nil) ⇒ Series
Shuffle the contents of this Series.
3747 3748 3749 |
# File 'lib/polars/series.rb', line 3747 def shuffle(seed: nil) super end |
#sign ⇒ Series
Compute the element-wise indication of the sign.
2477 2478 2479 |
# File 'lib/polars/series.rb', line 2477 def sign super end |
#sin ⇒ Series
Compute the element-wise value for the sine.
2496 2497 2498 |
# File 'lib/polars/series.rb', line 2496 def sin super end |
#sinh ⇒ Series
Compute the element-wise value for the hyperbolic sine.
2678 2679 2680 |
# File 'lib/polars/series.rb', line 2678 def sinh super end |
#skew(bias: true) ⇒ Float?
Compute the sample skewness of a data set.
For normally distributed data, the skewness should be about zero. For
unimodal continuous distributions, a skewness value greater than zero means
that there is more weight in the right tail of the distribution. The
function skewtest can be used to determine if the skewness value
is close enough to zero, statistically speaking.
3635 3636 3637 |
# File 'lib/polars/series.rb', line 3635 def skew(bias: true) _s.skew(bias) end |
#slice(offset, length = nil) ⇒ Series
Get a slice of this Series.
1264 1265 1266 |
# File 'lib/polars/series.rb', line 1264 def slice(offset, length = nil) super end |
#sort(reverse: false, in_place: false) ⇒ Series
Sort this Series.
1446 1447 1448 1449 1450 1451 1452 1453 |
# File 'lib/polars/series.rb', line 1446 def sort(reverse: false, in_place: false) if in_place self._s = _s.sort(reverse) self else Utils.wrap_s(_s.sort(reverse)) end end |
#sqrt ⇒ Series
Compute the square root of the elements.
407 408 409 |
# File 'lib/polars/series.rb', line 407 def sqrt self**0.5 end |
#std(ddof: 1) ⇒ Float?
Get the standard deviation of this Series.
659 660 661 662 663 664 665 |
# File 'lib/polars/series.rb', line 659 def std(ddof: 1) if !is_numeric nil else to_frame.select(Polars.col(name).std(ddof: ddof)).to_series[0] end end |
#str ⇒ StringNameSpace
Create an object namespace of all string related methods.
3898 3899 3900 |
# File 'lib/polars/series.rb', line 3898 def str StringNameSpace.new(self) end |
#struct ⇒ StructNameSpace
Create an object namespace of all struct related methods.
3905 3906 3907 |
# File 'lib/polars/series.rb', line 3905 def struct StructNameSpace.new(self) end |
#sum ⇒ Numeric
Dtypes :i8, :u8, :i16, and :u16 are cast to
:i64 before summing to prevent overflow issues.
Reduce this Series to the sum value.
586 587 588 |
# File 'lib/polars/series.rb', line 586 def sum _s.sum end |
#tail(n = 10) ⇒ Series
Get the last n rows.
1393 1394 1395 |
# File 'lib/polars/series.rb', line 1393 def tail(n = 10) to_frame.select(Utils.col(name).tail(n)).to_series end |
#take(indices) ⇒ Series
Take values by index.
1636 1637 1638 |
# File 'lib/polars/series.rb', line 1636 def take(indices) to_frame.select(Polars.col(name).take(indices)).to_series end |
#take_every(n) ⇒ Series
Take every nth value in the Series and return as new Series.
1411 1412 1413 |
# File 'lib/polars/series.rb', line 1411 def take_every(n) super end |
#tan ⇒ Series
Compute the element-wise value for the tangent.
2534 2535 2536 |
# File 'lib/polars/series.rb', line 2534 def tan super end |
#tanh ⇒ Series
Compute the element-wise value for the hyperbolic tangent.
2716 2717 2718 |
# File 'lib/polars/series.rb', line 2716 def tanh super end |
#time_unit ⇒ String
Get the time unit of underlying Datetime Series as "ns", "us", or "ms".
133 134 135 |
# File 'lib/polars/series.rb', line 133 def time_unit _s.time_unit end |
#to_a ⇒ Array
Convert this Series to a Ruby Array. This operation clones data.
2040 2041 2042 |
# File 'lib/polars/series.rb', line 2040 def to_a _s.to_a end |
#to_dummies(separator: "_", drop_first: false) ⇒ DataFrame
Get dummy variables.
734 735 736 |
# File 'lib/polars/series.rb', line 734 def to_dummies(separator: "_", drop_first: false) Utils.wrap_df(_s.to_dummies(separator, drop_first)) end |
#to_frame ⇒ DataFrame
Cast this Series to a DataFrame.
488 489 490 |
# File 'lib/polars/series.rb', line 488 def to_frame Utils.wrap_df(RbDataFrame.new([_s])) end |
#to_numo ⇒ Numo::NArray
Convert this Series to a Numo array. This operation clones data but is completely safe.
2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 |
# File 'lib/polars/series.rb', line 2156 def to_numo if !has_validity if is_datelike Numo::RObject.cast(to_a) elsif is_numeric # TODO make more efficient { UInt8 => Numo::UInt8, UInt16 => Numo::UInt16, UInt32 => Numo::UInt32, UInt64 => Numo::UInt64, Int8 => Numo::Int8, Int16 => Numo::Int16, Int32 => Numo::Int32, Int64 => Numo::Int64, Float32 => Numo::SFloat, Float64 => Numo::DFloat }.fetch(dtype).cast(to_a) elsif is_boolean Numo::Bit.cast(to_a) else _s.to_numo end elsif is_datelike Numo::RObject.cast(to_a) else _s.to_numo end end |
#to_physical ⇒ Series
Cast to physical representation of the logical dtype.
:date->:i32:datetime->:i64:time->:i64:duration->:i64:cat->:u32- other data types will be left unchanged.
2028 2029 2030 |
# File 'lib/polars/series.rb', line 2028 def to_physical super end |
#to_s ⇒ String Also known as: inspect
Returns a string representing the Series.
140 141 142 |
# File 'lib/polars/series.rb', line 140 def to_s _s.to_s end |
#top_k(k: 5) ⇒ Boolean
Return the k largest elements.
1473 1474 1475 |
# File 'lib/polars/series.rb', line 1473 def top_k(k: 5) super end |
#unique(maintain_order: false) ⇒ Series Also known as: uniq
Get unique elements in series.
1614 1615 1616 |
# File 'lib/polars/series.rb', line 1614 def unique(maintain_order: false) super end |
#unique_counts ⇒ Series
Return a count of the unique values in the order of appearance.
984 985 986 |
# File 'lib/polars/series.rb', line 984 def unique_counts super end |
#value_counts(sort: false) ⇒ DataFrame
Count the unique values in a Series.
965 966 967 |
# File 'lib/polars/series.rb', line 965 def value_counts(sort: false) Utils.wrap_df(_s.value_counts(sort)) end |
#var(ddof: 1) ⇒ Float?
Get variance of this Series.
679 680 681 682 683 684 685 |
# File 'lib/polars/series.rb', line 679 def var(ddof: 1) if !is_numeric nil else to_frame.select(Polars.col(name).var(ddof: ddof)).to_series[0] end end |
#zip_with(mask, other) ⇒ Series
Take values from self or other based on the given mask.
Where mask evaluates true, take values from self. Where mask evaluates false, take values from other.
2842 2843 2844 |
# File 'lib/polars/series.rb', line 2842 def zip_with(mask, other) Utils.wrap_s(_s.zip_with(mask._s, other._s)) end |