# Frame<'TRowKey, 'TColumnKey>

Namespace: Deedle

A frame is the key Deedle data structure (together with series). It represents a data table (think spreadsheet or CSV file) with multiple rows and columns. The frame consists of row index, column index and data. The indices are used for efficient lookup when accessing data by the row key 'TRowKey or by the column key 'TColumnKey. Deedle frames are optimized for the scenario when all values in a given column are of the same type (but types of different columns can differ).

## Accessors and slicing

### Instance members

Instance memberDescription
 ColumnKeys 
Signature: seq<'TColumnKey>
 Columns 
Signature: ColumnSeries<'TRowKey,'TColumnKey>
 ColumnsDense 
Signature: ColumnSeries<'TRowKey,'TColumnKey>
 ColumnTypes 
Signature: seq<Type>
 GetRow(rowKey, lookup) 
Signature: (rowKey:'TRowKey * lookup:Lookup) -> Series<'TColumnKey,'T>

Returns a row with the specieifed key. This method is generic and returns the result as a series containing values of the specified type. To get heterogeneous series of type ObjectSeries<'TCol>, use the frame.Rows property.

## Parameters

• rowKey - Specifies the key of the row to be returned
• lookup - Specifies how to find value in a frame with ordered rows when the key does not exactly match (look for nearest available value with the smaller/greater key).
 GetRow(rowKey) 
Signature: rowKey:'TRowKey -> Series<'TColumnKey,'T>

Returns a row with the specieifed key. This method is generic and returns the result as a series containing values of the specified type. To get heterogeneous series of type ObjectSeries<'TCol>, use the frame.Rows property.

## Parameters

• rowKey - Specifies the key of the row to be returned
 GetRowAt(index) 
Signature: index:int -> Series<'TColumnKey,'T>

Returns a row of the data frame that is located at the specified int offset. This does not use the row key and directly accesses the frame data. This method is generic and returns the result as a series containing values of the specified type. To get heterogeneous series of type ObjectSeries<'TCol>, use the frame.Rows property. If the index is invalid, ArgumentOutOfRangeException is thrown. You can get the matching key at a specified index using GetRowKeyAt.

## Parameters

• index - Offset (integer) of the row to be returned
 GetRowKeyAt(index) 
Signature: index:int64 -> 'TRowKey

Returns the row key that is located at the specified int offset. If the index is invalid, ArgumentOutOfRangeException is thrown. You can get the corresponding row using GetRowAt.

## Parameters

• index - Offset (integer) of the row key to be returned
 GetRowsAs() 
Signature: unit -> Series<'TRowKey,'TRow>
 GetSubrange(lo, hi) 
Signature: (lo:('TRowKey * BoundaryBehavior) option * hi:('TRowKey * BoundaryBehavior) option) -> Frame<'TRowKey,'TColumnKey>
 IsEmpty 
Signature: bool
 [column, row] 
Signature: column:'TColumnKey * row:'TRowKey -> obj
 RowKeys 
Signature: seq<'TRowKey>
 Rows 
Signature: RowSeries<'TRowKey,'TColumnKey>
 RowsDense 
Signature: RowSeries<'TRowKey,'TColumnKey>
 TryGetRow(rowKey, lookup) 
Signature: (rowKey:'TRowKey * lookup:Lookup) -> OptionalValue<Series<'TColumnKey,'T>>

Returns a row with the specieifed key wrapped in OptionalValue. When the specified key is not found, the result is OptionalValue.Missing. This method is generic and returns the result as a series containing values of the specified type. To get heterogeneous series of type ObjectSeries<'TCol>, use the frame.Rows property.

## Parameters

• rowKey - Specifies the key of the row to be returned
• lookup - Specifies how to find value in a frame with ordered rows when the key does not exactly match (look for nearest available value with the smaller/greater key).
 TryGetRow(rowKey) 
Signature: rowKey:'TRowKey -> OptionalValue<Series<'TColumnKey,'T>>

Returns a row with the specieifed key wrapped in OptionalValue. When the specified key is not found, the result is OptionalValue.Missing. This method is generic and returns the result as a series containing values of the specified type. To get heterogeneous series of type ObjectSeries<'TCol>, use the frame.Rows property.

## Parameters

• rowKey - Specifies the key of the row to be returned
 TryGetRowObservation(rowKey, lookup) 
Signature: (rowKey:'TRowKey * lookup:Lookup) -> OptionalValue<KeyValuePair<'TRowKey,Series<'TColumnKey,'T>>>

Try to find a row with the specified row key, or using the specified lookup parameter, and return the found row together with its actual key in case lookup was used. In case the row is not found, OptionalValue.Missing is returned.

## Parameters

• rowKey - Specifies the key of the row to be returned
• lookup - Specifies how to find value in a frame with ordered rows when the key does not exactly match (look for nearest available value with the smaller/greater key).

## Fancy accessors

### Instance members

Instance memberDescription
 GetAllValues(strict) 
Signature: strict:ConversionKind -> seq<'R>
 GetAllValues() 
Signature: unit -> seq<'R>
 GetColumns() 
Signature: unit -> Series<'TColumnKey,Series<'TRowKey,'R>>
 GetRows() 
Signature: unit -> Series<'TRowKey,Series<'TColumnKey,'R>>
 ToArray2D() 
Signature: unit -> 'R [,]

Returns data of the data frame as a 2D array. The method attempts to convert all values to the specified type 'R. If the specified type is 'float' or 'double' then the method automatically uses NaN. For other values, the default value has to be explicitly specified using another overload.

 ToArray2D(defaultValue) 
Signature: defaultValue:'R -> 'R [,]

Returns data of the data frame as a 2D array. The method attempts to convert all values to the specified type 'R. When a value is missing, the specified defaultValue is used.

## Parameters

• defaultValue - Default value used to fill all missing values

## Formatting and raw data access

### Instance members

Instance memberDescription
 Format(startCount, endCount, printTypes) 
Signature: (startCount:int * endCount:int * printTypes:bool) -> string

Shows the data frame content in a human-readable format. The resulting string shows all columns, but a limited number of rows.

## Parameters

• startCount - The number of rows at the beginning to be printed
• endCount - The number of rows at the end of the frame to be printed
• printTypes - When true, the types of vectors storing column data are printed
 Format(startCount, endCount) 
Signature: (startCount:int * endCount:int) -> string

Shows the data frame content in a human-readable format. The resulting string shows all columns, but a limited number of rows.

## Parameters

• startCount - The number of rows at the beginning to be printed
• endCount - The number of rows at the end of the frame to be printed
 Format(count) 
Signature: count:int -> string

Shows the data frame content in a human-readable format. The resulting string shows all columns, but a limited number of rows.

## Parameters

• count - The maximal total number of rows to be printed
 Format(printTypes) 
Signature: printTypes:bool -> string

Shows the data frame content in a human-readable format. The resulting string shows all columns, but a limited number of rows.

## Parameters

• startCount - The number of rows at the beginning to be printed
• endCount - The number of rows at the end of the frame to be printed
• printTypes - When true, the types of vectors storing column data are printed
 Format() 
Signature: unit -> string

Shows the data frame content in a human-readable format. The resulting string shows all columns, but a limited number of rows.

 GetFrameData() 
Signature: unit -> FrameData

## Indexing

### Instance members

Instance memberDescription
 IndexRows(column) 
Signature: column:'TColumnKey -> Frame<'TNewRowIndex,'TColumnKey>

Returns a data frame whose rows are indexed based on the specified column of the original data frame. The generic type parameter is (typically) needed to specify the type of the values in the required index column.

The resulting frame will not contain the specified column. If you want to preserve the column, use the overload that takes keepColumn parameter.

## Parameters

• column - The name of a column in the original data frame that will be used for the new index. Note that the values in the column need to be unique.
 IndexRows(column, keepColumn) 
Signature: (column:'TColumnKey * keepColumn:bool) -> Frame<'TNewRowIndex,'TColumnKey>

Returns a data frame whose rows are indexed based on the specified column of the original data frame. The generic type parameter is (typically) needed to specify the type of the values in the required index column.

## Parameters

• column - The name of a column in the original data frame that will be used for the new index. Note that the values in the column need to be unique.
• keepColumn - Specifies whether the column used as an index should be kept in the frame.

## Joining, zipping and appending

### Instance members

Instance memberDescription
 Join(colKey, series) 
Signature: (colKey:'TColumnKey * series:Series<'TRowKey,'V>) -> Frame<'TRowKey,'TColumnKey>

Performs outer join on data frame and a series. The column key for the joined series must not occur in the current data frame. The rows are automatically aligned and unavailable values are marked as missing.

## Parameters

• colKey - Column key to be used for the joined series
• series - Series to be joined with the current data frame
 Join(colKey, series, kind) 
Signature: (colKey:'TColumnKey * series:Series<'TRowKey,'V> * kind:JoinKind) -> Frame<'TRowKey,'TColumnKey>

Join data frame and a series. The column key for the joined series must not occur in the current data frame. The rows are aligned and transformed according to the specified join kind.

## Parameters

• colKey - Column key to be used for the joined series
• series - Series to be joined with the current data frame
• kind - Specifies the joining behavior on row indices. Use JoinKind.Outer and JoinKind.Inner to get the union and intersection of the row keys, respectively. Use JoinKind.Left and JoinKind.Right to use the current key of the left/right data frame.
 Join(colKey, series, kind, lookup) 
Signature: (colKey:'TColumnKey * series:Series<'TRowKey,'V> * kind:JoinKind * lookup:Lookup) -> Frame<'TRowKey,'TColumnKey>

Join data frame and a series. The column key for the joined series must not occur in the current data frame. The rows are aligned and transformed according to the specified join kind. When the index of both objects is ordered, it is possible to specify lookup in order to align indices from other frame to the indices of the main frame (typically, to find the nearest key with available value for a key).

## Parameters

• colKey - Column key to be used for the joined series
• series - Series to be joined with the current data frame
• kind - Specifies the joining behavior on row indices. Use JoinKind.Outer and JoinKind.Inner to get the union and intersection of the row keys, respectively. Use JoinKind.Left and JoinKind.Right to use the current key of the left/right data frame.
• lookup - When kind is Left or Right and the two frames have ordered row index, this parameter can be used to specify how to find value for a key when there is no exactly matching key or when there are missing values. Supported values are Lookup.Exact, Lookup.ExactOrSmaller and Lookup.ExactOrGreater.
 Join(otherFrame) 
Signature: otherFrame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>

Performs outer join on two data frames. The columns of the joined frames must not overlap and their rows are aligned. The unavailable values are marked as missing.

## Parameters

• otherFrame - Other frame (right) to be joined with the current instance (left)
 Join(otherFrame, kind) 
Signature: (otherFrame:Frame<'TRowKey,'TColumnKey> * kind:JoinKind) -> Frame<'TRowKey,'TColumnKey>

Join two data frames. The columns of the joined frames must not overlap and their rows are aligned and transformed according to the specified join kind. For more alignment options on ordered frames, see overload taking lookup.

## Parameters

• otherFrame - Other frame (right) to be joined with the current instance (left)
• kind - Specifies the joining behavior on row indices. Use JoinKind.Outer and JoinKind.Inner to get the union and intersection of the row keys, respectively. Use JoinKind.Left and JoinKind.Right to use the current key of the left/right data frame.
 Join(otherFrame, kind, lookup) 
Signature: (otherFrame:Frame<'TRowKey,'TColumnKey> * kind:JoinKind * lookup:Lookup) -> Frame<'TRowKey,'TColumnKey>

Join two data frames. The columns of the joined frames must not overlap and their rows are aligned and transformed according to the specified join kind. When the index of both frames is ordered, it is possible to specify lookup in order to align indices from other frame to the indices of the main frame (typically, to find the nearest key with available value for a key).

## Parameters

• otherFrame - Other frame (right) to be joined with the current instance (left)
• kind - Specifies the joining behavior on row indices. Use JoinKind.Outer and JoinKind.Inner to get the union and intersection of the row keys, respectively. Use JoinKind.Left and JoinKind.Right to use the current key of the left/right data frame.
• lookup - When kind is Left or Right and the two frames have ordered row index, this parameter can be used to specify how to find value for a key when there is no exactly matching key or when there are missing values. Supported values are Lookup.Exact, Lookup.ExactOrSmaller and Lookup.ExactOrGreater.
 Merge(otherFrames) 
Signature: (otherFrames:Frame<'TRowKey,'TColumnKey> []) -> Frame<'TRowKey,'TColumnKey>

Merge multiple data frames with non-overlapping values. The operation takes the union of columns and rows of the source data frames and then unions the values. An exception is thrown when both data frames define value for a column/row location, but the operation succeeds if one frame has a missing value at the location.

Note that the rows are not automatically reindexed to avoid overlaps. This means that when a frame has rows indexed with ordinal numbers, you may need to explicitly reindex the row keys before calling append.

## Parameters

• otherFrames - A collection containing other data frame to be appended (combined) with the current instance
 Merge(otherFrames) 
Signature: otherFrames:seq<Frame<'TRowKey,'TColumnKey>> -> Frame<'TRowKey,'TColumnKey>

Merge multiple data frames with non-overlapping values. The operation takes the union of columns and rows of the source data frames and then unions the values. An exception is thrown when both data frames define value for a column/row location, but the operation succeeds if one frame has a missing value at the location.

Note that the rows are not automatically reindexed to avoid overlaps. This means that when a frame has rows indexed with ordinal numbers, you may need to explicitly reindex the row keys before calling append.

## Parameters

• otherFrames - A collection containing other data frame to be appended (combined) with the current instance
 Merge(otherFrame) 
Signature: otherFrame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>

Merge two data frames with non-overlapping values. The operation takes the union of columns and rows of the source data frames and then unions the values. An exception is thrown when both data frames define value for a column/row location, but the operation succeeds if one frame has a missing value at the location.

Note that the rows are not automatically reindexed to avoid overlaps. This means that when a frame has rows indexed with ordinal numbers, you may need to explicitly reindex the row keys before calling append.

## Parameters

• otherFrame - The other frame to be appended (combined) with the current instance
 Zip(otherFrame, op) 
Signature: (otherFrame:Frame<'TRowKey,'TColumnKey> * op:Func<'V1,'V2,'V3>) -> Frame<'TRowKey,'TColumnKey>
Type parameters: 'V3

Aligns two data frames using both column index and row index and apply the specified operation on values of a specified type that are available in both data frames. This overload uses JoinKind.Outer for both columns and rows.

Once aligned, the call df1.Zip<T>(df2, f) applies the specifed function f on all T values that are available in corresponding locations in both frames. For values of other types, the value from df1 is returned.

## Parameters

• otherFrame - Other frame to be aligned and zipped with the current instance
• op - A function that is applied to aligned values. The Zip operation is generic in the type of this function and the type of function is used to determine which values in the frames are zipped and which are left unchanged.
 Zip(...) 
Signature: (otherFrame:Frame<'TRowKey,'TColumnKey> * columnKind:JoinKind * rowKind:JoinKind * lookup:Lookup * op:Func<'V1,'V2,'V3>) -> Frame<'TRowKey,'TColumnKey>
Type parameters: 'V3

Aligns two data frames using both column index and row index and apply the specified operation on values of a specified type that are available in both data frames. The parameters columnKind, and rowKind can be specified to determine how the alginment works (similarly to Join). Column keys are always matched using Lookup.Exact, but lookup determines lookup for rows.

Once aligned, the call df1.Zip<T>(df2, f) applies the specifed function f on all T values that are available in corresponding locations in both frames. For values of other types, the value from df1 is returned.

## Parameters

• otherFrame - Other frame to be aligned and zipped with the current instance
• columnKind - Specifies how to align columns (inner, outer, left or right join)
• rowKind - Specifies how to align rows (inner, outer, left or right join)
• lookup - Specifies how to find matching value for a row (when using left or right join on rows) Supported values are Lookup.Exact, Lookup.ExactOrSmaller and Lookup.ExactOrGreater.
• op - A function that is applied to aligned values. The Zip operation is generic in the type of this function and the type of function is used to determine which values in the frames are zipped and which are left unchanged.

## Operators

### Static members

 Static member Description  ( - )(scalar, frame)  Signature: (scalar:int * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( - )(frame, scalar)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * scalar:int) -> Frame<'TRowKey,'TColumnKey>  ( - )(scalar, frame)  Signature: (scalar:float * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( - )(frame, scalar)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * scalar:float) -> Frame<'TRowKey,'TColumnKey>  ( - )(series, frame)  Signature: (series:Series<'TRowKey,int> * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( - )(frame, series)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * series:Series<'TRowKey,int>) -> Frame<'TRowKey,'TColumnKey>  ( - )(series, frame)  Signature: (series:Series<'TRowKey,float> * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( - )(frame, series)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * series:Series<'TRowKey,float>) -> Frame<'TRowKey,'TColumnKey>  ( - )(frame1, frame2)  Signature: (frame1:Frame<'TRowKey,'TColumnKey> * frame2:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( * )(scalar, frame)  Signature: (scalar:int * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( * )(frame, scalar)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * scalar:int) -> Frame<'TRowKey,'TColumnKey>  ( * )(scalar, frame)  Signature: (scalar:float * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( * )(frame, scalar)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * scalar:float) -> Frame<'TRowKey,'TColumnKey>  ( * )(series, frame)  Signature: (series:Series<'TRowKey,int> * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( * )(frame, series)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * series:Series<'TRowKey,int>) -> Frame<'TRowKey,'TColumnKey>  ( * )(series, frame)  Signature: (series:Series<'TRowKey,float> * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( * )(frame, series)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * series:Series<'TRowKey,float>) -> Frame<'TRowKey,'TColumnKey>  ( * )(frame1, frame2)  Signature: (frame1:Frame<'TRowKey,'TColumnKey> * frame2:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( / )(scalar, frame)  Signature: (scalar:int * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( / )(frame, scalar)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * scalar:int) -> Frame<'TRowKey,'TColumnKey>  ( / )(scalar, frame)  Signature: (scalar:float * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( / )(frame, scalar)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * scalar:float) -> Frame<'TRowKey,'TColumnKey>  ( / )(series, frame)  Signature: (series:Series<'TRowKey,int> * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( / )(frame, series)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * series:Series<'TRowKey,int>) -> Frame<'TRowKey,'TColumnKey>  ( / )(series, frame)  Signature: (series:Series<'TRowKey,float> * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( / )(frame, series)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * series:Series<'TRowKey,float>) -> Frame<'TRowKey,'TColumnKey>  ( / )(frame1, frame2)  Signature: (frame1:Frame<'TRowKey,'TColumnKey> * frame2:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( ~- )(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  ( + )(scalar, frame)  Signature: (scalar:int * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( + )(frame, scalar)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * scalar:int) -> Frame<'TRowKey,'TColumnKey>  ( + )(scalar, frame)  Signature: (scalar:float * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( + )(frame, scalar)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * scalar:float) -> Frame<'TRowKey,'TColumnKey>  ( + )(series, frame)  Signature: (series:Series<'TRowKey,int> * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( + )(frame, series)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * series:Series<'TRowKey,int>) -> Frame<'TRowKey,'TColumnKey>  ( + )(series, frame)  Signature: (series:Series<'TRowKey,float> * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  ( + )(frame, series)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * series:Series<'TRowKey,float>) -> Frame<'TRowKey,'TColumnKey>  ( + )(frame1, frame2)  Signature: (frame1:Frame<'TRowKey,'TColumnKey> * frame2:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  Abs(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Acos(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Asin(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Atan(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Ceiling(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Cos(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Cosh(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Exp(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Floor(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Log(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Log10(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Pow(scalar, frame)  Signature: (scalar:float * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey>  Pow(frame, scalar)  Signature: (frame:Frame<'TRowKey,'TColumnKey> * scalar:float) -> Frame<'TRowKey,'TColumnKey>  Round(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Sign(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Sin(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Sinh(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Sqrt(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Tan(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Tanh(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>  Truncate(frame)  Signature: frame:Frame<'TRowKey,'TColumnKey> -> Frame<'TRowKey,'TColumnKey>

## Projection and filtering

### Instance members

 Instance member Description  ColumnApply(conversionKind, f)  Signature: (conversionKind:ConversionKind * f:Func,ISeries<'TRowKey>>) -> Frame<'TRowKey,'TColumnKey>  ColumnApply(f)  Signature: f:Func,ISeries<'TRowKey>> -> Frame<'TRowKey,'TColumnKey>  Select(f)  Signature: f:Func<'TRowKey,'TColumnKey,'T1,'T2> -> Frame<'TRowKey,'TColumnKey>  SelectValues(f)  Signature: f:Func<'T1,'T2> -> Frame<'TRowKey,'TColumnKey>

## Series operations

### Instance members

Instance memberDescription
 AddColumn(column, series, lookup) 
Signature: (column:'TColumnKey * series:ISeries<'TRowKey> * lookup:Lookup) -> unit

Mutates the data frame by adding an additional data series as a new column with the specified column key. The operation uses left join and aligns new series to the existing frame keys. A parameter lookup can be used to specify how to find a value in the added series (if an exact key is not available). The lookup parameter can only be used with ordered indices.

## Parameters

• series - A data series to be added (the row key type has to match)
• column - A key (or name) for the newly added column
• lookup - Specify how to find value in the added series (look for nearest available value with the smaller/greater key).
 AddColumn(column, series, lookup) 
Signature: (column:'TColumnKey * series:seq<'V> * lookup:Lookup) -> unit

Mutates the data frame by adding an additional data series as a new column with the specified column key. The sequence is aligned to the data frame based on ordering. If it is longer, it is trimmed and if it is shorter, missing values will be added. A parameter lookup can be used to specify how to find a value in the added series (if the sequence contains invalid values like null or NaN).

## Parameters

• column - A key (or name) for the newly added column
• series - A sequence of values to be added
• lookup - Specify how to find value in the added series (look for nearest available value with the smaller/greater key).
 AddColumn(column, series) 
Signature: (column:'TColumnKey * series:ISeries<'TRowKey>) -> unit

Mutates the data frame by adding an additional data series as a new column with the specified column key. The operation uses left join and aligns new series to the existing frame keys.

## Parameters

• series - A data series to be added (the row key type has to match)
• column - A key (or name) for the newly added column
 AddColumn(column, series) 
Signature: (column:'TColumnKey * series:seq<'V>) -> unit

Mutates the data frame by adding an additional data series as a new column with the specified column key. The sequence is aligned to the data frame based on ordering. If it is longer, it is trimmed and if it is shorter, missing values will be added.

## Parameters

• column - A key (or name) for the newly added column
• series - A sequence of values to be added
 DropColumn(column) 
Signature: column:'TColumnKey -> unit

Mutates the data frame by removing the specified series from the frame columns. The operation throws if the column key is not found.

## Parameters

• column - The key (or name) to be dropped from the frame
• frame - Source data frame (which is not mutated by the operation)
 GetAllColumns(conversionKind) 
Signature: conversionKind:ConversionKind -> seq<KeyValuePair<'TColumnKey,Series<'TRowKey,'R>>>
 GetAllColumns() 
Signature: unit -> seq<KeyValuePair<'TColumnKey,Series<'TRowKey,'R>>>
 GetColumn(column) 
Signature: column:'TColumnKey -> Series<'TRowKey,'R>
 GetColumn(column, lookup) 
Signature: (column:'TColumnKey * lookup:Lookup) -> Series<'TRowKey,'R>
 GetColumnAt(index) 
Signature: index:int -> Series<'TRowKey,'R>
 [column] 
Signature: column:'TColumnKey -> Series<'TRowKey,float>
 [()] 
Signature: unit -> 'TColumnKey
 RenameColumn(oldKey, newKey) 
Signature: (oldKey:'TColumnKey * newKey:'TColumnKey) -> unit
 RenameColumns(mapping) 
Signature: mapping:Func<'TColumnKey,'TColumnKey> -> unit
 RenameColumns(columnKeys) 
Signature: columnKeys:seq<'TColumnKey> -> unit
 ReplaceColumn(column, data) 
Signature: (column:'TColumnKey * data:seq<'V>) -> unit

Mutates the data frame by replacing the specified series with a new data sequence . (If the series does not exist, only the new series is added.)

## Parameters

• column - A key (or name) for the column to be replaced or added
• series - A sequence of values to be added
 ReplaceColumn(column, series) 
Signature: (column:'TColumnKey * series:ISeries<'TRowKey>) -> unit

Mutates the data frame by replacing the specified series with a new series. (If the series does not exist, only the new series is added.)

## Parameters

• column - A key (or name) for the column to be replaced or added
• series - A data series to be used (the row key type has to match)
 ReplaceColumn(column, data, lookup) 
Signature: (column:'TColumnKey * data:seq<'V> * lookup:Lookup) -> unit

Mutates the data frame by replacing the specified series with a new data sequence. (If the series does not exist, only the new series is added.) When adding a series, the specified lookup parameter is used for filling missing values (e.g. null or NaN). The parameter can only be used for frame with ordered indices.

## Parameters

• column - A key (or name) for the column to be replaced or added
• series - A data series to be used (the row key type has to match)
• lookup - Specify how to find value in the added series (look for nearest available value with the smaller/greater key).
 ReplaceColumn(column, series, lookup) 
Signature: (column:'TColumnKey * series:ISeries<'TRowKey> * lookup:Lookup) -> unit

Mutates the data frame by replacing the specified series with a new series. (If the series does not exist, only the new series is added.) When adding a series, the specified lookup parameter is used for matching keys. The parameter can only be used for frame with ordered indices.

## Parameters

• column - A key (or name) for the column to be replaced or added
• series - A data series to be used (the row key type has to match)
• lookup - Specify how to find value in the added series (look for nearest available value with the smaller/greater key).
 TryGetColumn(column, lookup) 
Signature: (column:'TColumnKey * lookup:Lookup) -> OptionalValue<Series<'TRowKey,'R>>
 TryGetColumnObservation(column, lookup) 
Signature: (column:'TColumnKey * lookup:Lookup) -> OptionalValue<KeyValuePair<'TColumnKey,Series<'TRowKey,'R>>>

### Static members

 Static member Description  ( ? )(frame, column)  Signature: (frame:Frame<'T,'?492076> * column:'?492076) -> Series<'T,float>  ( ?<- )(frame, column, data)  Signature: (frame:Frame<'?492069,'?492070> * column:'?492070 * data:seq<'V>) -> unit Type parameters: 'V  ( ?<- )(frame, column, series)  Signature: (frame:Frame<'T,'?492064> * column:'?492064 * series:Series<'T,'V>) -> unit Type parameters: 'V

## Windowing, chunking and grouping

### Instance members

Instance memberDescription
 AggregateRowsBy(groupBy, aggBy, aggFunc) 
Signature: (groupBy:seq<'TColumnKey> * aggBy:seq<'TColumnKey> * aggFunc:Func<Series<'TRowKey,'?492385>,'?492386>) -> Frame<int,'TColumnKey>

Returns a data frame whose rows are grouped by groupBy and whose columns specified in aggBy are aggregated according to aggFunc.

## Parameters

• groupBy - sequence of columns to group by
• aggBy - sequence of columns to apply aggFunc to
• aggFunc - invoked in order to aggregate values

## Other type members

### Constructors

 Constructor Description  new(names, columns)  Signature: (names:seq<'TColumnKey> * columns:seq>) -> Frame<'TRowKey,'TColumnKey>  new(...)  Signature: (rowIndex:IIndex<'TRowKey> * columnIndex:IIndex<'TColumnKey> * data:IVector * indexBuilder:IIndexBuilder * vectorBuilder:IVectorBuilder) -> Frame<'TRowKey,'TColumnKey>

### Instance members

 Instance member Description  Clone()  Signature: unit -> Frame<'TRowKey,'TColumnKey>  ColumnApply(strict, f)  Signature: (strict:bool * f:Func,ISeries<'TRowKey>>) -> Frame<'TRowKey,'TColumnKey>  ColumnCount  Signature: int  ColumnIndex  Signature: IIndex<'TColumnKey>  GetAddressRange(range)  Signature: range:RangeRestriction
-> Frame<'TRowKey,'TColumnKey> Internal helper used by skip, take, etc.  GetAllColumns(strict)  Signature: strict:bool -> seq>>  GroupRowsBy(colKey)  Signature: colKey:'TColumnKey -> Frame<('TGroup * 'TRowKey),'TColumnKey>  GroupRowsByIndex(keySelector)  Signature: keySelector:Func<'TRowKey,'?492377> -> Frame<('?492377 * 'TRowKey),'TColumnKey>  GroupRowsUsing(f)  Signature: f:Func<'TRowKey,ObjectSeries<'TColumnKey>,'TGroup> -> Frame<('TGroup * 'TRowKey),'TColumnKey>  RowCount  Signature: int  RowIndex  Signature: IIndex<'TRowKey>

### Static members

 Static member Description  ( \$ )(f, frame)  Signature: (f:('?492021 -> '?492022) * frame:Frame<'TRowKey,'TColumnKey>) -> Frame<'TRowKey,'TColumnKey> Custom operator that can be used for applying fuction to all elements of a frame. This provides a nicer syntactic sugar for the Frame.mapValues function.