DataFrame

class ampl::DataFrame

A DataFrame object, used to communicate data to and from the AMPL entities.

An object of this class can be used to do the following tasks:

  • Assign values to AMPL entities (once the DataFrame is populated, use AMPL::setData() to assign its values to the modelling entities in its columns)

  • Get values from AMPL, decoupling the values from the AMPL entities they originate via Entity::getValues()

A DataFrame object can be created in various ways.

Populating a DataFrame object can be done adding row by row to a pre-existing skeleton via DataFrame.addRow(), setting whole columns of a pre-existing skeleton via DataFrame.setColumn() or adding columns (including indexing columns) via DataFrame.addColumn().

Modifying a DataFrame object can be done via DataFrame.setColumn method.

Accessing data in a DataFrame can be done row by row using DataFrame.getRow() or by column via DataFrame.getColumn().

Public Types

typedef internal::Slice<true> Row

Represents a row in a DataFrame.

typedef internal::Slice<false> Column

Represents a column in a DataFrame.

Public Functions

inline explicit DataFrame(std::size_t numberOfIndexColumns)

Create a new DataFrame with the specified number of indices.

inline ~DataFrame()

Destructor.

inline DataFrame(std::size_t numberOfIndexColumns, StringArgs headers)

Create a new DataFrame where the specified number of columns are an index and with the specified strings as column headers.

Parameters
  • numberOfIndexColumns – Number of columns to be considered as index for this table (>=0)

  • headers – The columns headers to be used

Throws

std::invalid_argument – If a non-valid number of indices is specified (e.g. > than the number of headers)

inline explicit DataFrame(const EntityArgs &headers)

Create a new DataFrame with the specified entities as column headers.

Parameters

headers – The columns headers to be used; since they are AMPL entities, sets are automatically considered indices and have to be placed first in the constructor. The

Throws

std::invalid_argument – if sets are not put first while using this constructor or if the indexarity of the data columns does not correspond to the total indexarity of the DataFrame

inline DataFrame(const DataFrame &other)

Copy constructor (deep copy)

inline DataFrame &operator=(const DataFrame &df)

Assignment operator (deep copies all the data)

inline bool operator==(const DataFrame &other) const

Equality check.

inline bool operator!=(const DataFrame &other) const

Inequality check.

inline std::size_t getNumCols() const

Get the total number of columns in this dataframe (indexarity + number of values)

Returns

The number of columns.

inline std::size_t getNumRows() const

Get the number of data rows in this dataframe.

Returns

The number of rows.

inline std::size_t getNumIndices() const

std::size_t DataFrame::getNumIndices() const Get the number of indices (the indexarity) of this dataframe.

Returns

The number of indices needed to access one row of this dataframe.

inline void addRow(TupleRef value)

Add a row to the DataFrame.

The size of the tuple must be equal to the total number of columns in the dataframe.

Parameters

value – A tuple containing all the values for the row to be added.

inline void addRow(VariantRef a1)

Add a value to a DataFrame composed of only one column.

Parameters

a1 – The value to be added.

inline void addRow(VariantRef a1, VariantRef a2)

Add a value to a DataFrame composed of two columns.

Parameters
  • a1 – The value to be added in the first column.

  • a2 – The value to be added in the second column.

inline void addRow(VariantRef a1, VariantRef a2, VariantRef a3)

Add a value to a DataFrame composed of three columns.

Parameters
  • a1 – The value to be added in the first column.

  • a2 – The value to be added in the second column.

  • a3 – The value to be added in the third column.

inline void addRow(VariantRef a1, VariantRef a2, VariantRef a3, VariantRef a4)

Add a value to a DataFrame composed of four columns.

Parameters
  • a1 – The value to be added in the first column.

  • a2 – The value to be added in the second column.

  • a3 – The value to be added in the third column.

  • a4 – The value to be added in the fourth column.

inline void reserve(std::size_t numRows)

Reserve space for the given number of rows.

NOTE that the rows cannot be accessed, they still have to be added via DataFrame::addRow.

Parameters

numRows – Number of rows to be allocated.

inline std::string toString() const

Give a tabular string representation of the dataframe object.

Returns

A std::string that represents this object

inline void addColumn(fmt::CStringRef header)

Add a new empty column with the corresponding header.

Parameters

header – The header.

inline void addColumn(fmt::CStringRef header, internal::Args values)

Add a new column with the corresponding header and values to the dataframe.

Parameters
  • header – The name of the new column

  • values – An array of size getNumRows() with all the values of the new row

inline Column getColumn(fmt::CStringRef header) const

Get the specified column as a view object.

Parameters

header – The header of the column.

inline void setValue(TupleRef rowIndex, fmt::CStringRef colHeader, ampl::VariantRef value)

Set the value at the specified row and columnn.

Parameters
  • rowIndex – A tuple identiying the row to modify

  • colHeader – The header of the column to modify

  • value – The value to assign

inline void setValue(std::size_t rowIndex, size_t colIndex, ampl::VariantRef value)

Set the value at the specified row and columnn.

Parameters
  • rowIndex – The 0-based index of the row to modify

  • colIndex – The 0-based index of the column to modify (including indices)

  • value – The value to assign

inline void setColumn(fmt::CStringRef header, internal::Args column, std::size_t n)

Set the values of a column.

Parameters
  • header – The header of the column to be set

  • column – The values to set.

  • n – The number of items in the column.

inline Row getRowByIndex(std::size_t index) const

Get row by numeric index.

Parameters

index – Zero-based index of the row to get

Returns

The corresponding row.

inline Row getRow(VariantRef a1)

Get a row by value of the indexing column (for DataFrames with one indexing column)

Parameters

a1 – Index of the desired row

Returns

The correponding row.

inline Row getRow(TupleRef index = TupleRef()) const

Get a row by value of the indexing columns.

If the index is not specified, gets the only row of a dataframe with no indexing columns.

Parameters

indexTuple representing the index of the desired row

Returns

The row.

inline iterator begin() const

Get the iterator to the first row in this DataFrame.

inline iterator end() const

Get the iterator to the last row in this DataFrame (an iterator of numerical index DataFrame::getNumRows).

inline iterator find(TupleRef index) const

Get the iterator to the specified row in this DataFrame.

Parameters

index – The index of the Row to be found

Returns

An iterator pointing to the found row, or iterator::end if not found.

inline StringArray getHeaders() const

Get the headers of this DataFrame.

Returns

The headers of this DataFrame

template<std::size_t NR>
inline void setArray(internal::Args indices, const double (&values)[NR])

Set the values of a DataFrame from an array of doubles.

The DataFrame must have one index and one data column.

Parameters
  • indices – The indices of the values to set

  • values – An array containing the values to be set

template<std::size_t NR>
inline void setArray(internal::Args indices, const char *(&values)[NR])

Set the values of a DataFrame from an array of string literals.

The DataFrame must have one index and one data column.

Parameters
  • indices – The indices of the values to set

  • values – An array containing the values to be set

inline void setArray(std::size_t size, internal::Args indices, const double *values)

Set the values of a DataFrame from an array of doubles.

The DataFrame must have one index and one data column.

Parameters
  • size – The size of the two arrays passed

  • indices – The indices of the values to set

  • values – An array containing the values to be set

inline void setArray(std::size_t size, internal::Args indices, const char *const *values)

Set the values of a DataFrame from an array of string literals.

The DataFrame must have one index and one data column.

Parameters
  • size – The size of the two arrays passed

  • indices – The indices of the values to set

  • values – An array containing the values to be set

template<std::size_t NR, std::size_t NC>
inline void setMatrix(internal::Args indices0, internal::Args indices1, const double (&values)[NR][NC])

Set a matrix of doubles to an empty DataFrame.

The DataFrame must have two indices and one data column.

Parameters
  • indices0 – The values of the first indexing column

  • indices1 – The values of the second indexing column

  • values – a 2d-array of doubles

template<std::size_t NR, std::size_t NC>
inline void setMatrix(internal::Args indices0, internal::Args indices1, const char *(&values)[NR][NC])

Set a matrix of strings to an empty DataFrame.

The DataFrame must have two indices and one data column.

Parameters
  • indices0 – The values of the first indexing column

  • indices1 – The values of the second indexing column

  • values – a 2d-array of string literals

inline void setMatrix(std::size_t num_rows, internal::Args row_indices, std::size_t num_cols, internal::Args indices_cols, const double *values)

Set a matrix of doubles to an empty DataFrame.

The DataFrame must have two indices and one data column.

Parameters
  • num_rows – The size of the first dimension (number of rows)

  • row_indices – The values of the first indexing column

  • num_cols – The size of the second dimension (number of columns)

  • indices_cols – The values of the second indexing column

  • values – a 2d-array of doubles

inline void setMatrix(std::size_t num_rows, internal::Args row_indices, std::size_t num_cols, internal::Args indices_cols, const char *const *values)

Set a matrix of string literals to an empty DataFrame.

The DataFrame must have two indices and one data column.

Parameters
  • num_rows – The size of the first dimension (number of rows)

  • row_indices – The values of the first indexing column

  • num_cols – The size of the second dimension (number of columns)

  • indices_cols – The values of the second indexing column

  • values – a 2d-array of strings

inline internal::DataFrame *impl() const

Infrastructure: returns a pointer to the inner object.

class iterator

Iterates through the DataFrame in a row-by-row fashion.

Public Types

using iterator_category = std::forward_iterator_tag
using value_type = Row
using difference_type = std::ptrdiff_t
using pointer = value_type*
using reference = value_type&

Public Functions

inline value_type operator*() const

Dereferences the iterator, gets a DataFrame::Row.

inline iterator &operator++()

Go to the next row.

inline iterator operator++(int)

Go to the next row.

inline bool operator==(iterator other) const

Equality check.

inline bool operator!=(iterator other) const

Inequality check.