Skip to content

DataTable

DataTable

Bases: BaseClass

Attributes:

Name Type Description
id str

id of the datatable

name str

name of the datatable

columns List[Column]

List of Column objects belonging to this datatable. For additional information, consult the Column documentation. Initially, the columns only present the id and name. To retrieve their values, utilize the get() method on the relevant column or invoke the get_columns() method of the datatable.

_fetched bool

This is a Boolean attribute indicating whether all attributes have been retrieved from the server or only the name and ID are present.

Source code in furthrmind\collection\datatable.py
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 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
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
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
337
338
339
340
341
342
343
344
345
346
347
348
class DataTable(BaseClass):
    """
    Attributes
    ----------
    id : str
        id of the datatable
    name : str
        name of the datatable
    columns : List[Column]
        List of [Column](column.md) objects belonging to this datatable. For additional information, consult the
        [Column](column.md) documentation. Initially, the columns only present the id and name. To retrieve their
        values, utilize the get() method on the relevant column or invoke the get_columns() method of the datatable.
    _fetched : bool
        This is a Boolean attribute indicating whether all attributes have been retrieved from the server or only
        the name and ID are present.
    """

    id = ""
    name = ""
    columns: List["Column"] = []

    _attr_definition = {
        "columns": {"class": "Column"}
    }

    def __init__(self, id=None, data=None):
        super().__init__(id, data)

    def _get_url_instance(self, project_id=None):
        project_url = DataTable.fm.get_project_url(project_id)
        url = f"{project_url}/rawdata/{self.id}"
        return url

    @classmethod
    def _get_url_class(cls, id, project_id=None):
        project_url = cls.fm.get_project_url(project_id)
        url = f"{project_url}/rawdata/{id}"
        return url

    @classmethod
    def _get_all_url(cls, project_id=None):
        project_url = cls.fm.get_project_url(project_id)
        url = f"{project_url}/rawdata"
        return url

    @classmethod
    def _post_url(cls, project_id=None):
        project_url = cls.fm.get_project_url(project_id)
        url = f"{project_url}/rawdata"
        return url

    @classmethod
    def get(cls, id: str = "", project_id: str = "") -> Self:
        """
        This method retrieves a singular `datatable` using its ID. If this method is invoked on an instance of the class,
        the instance's ID is utilized. The retrieved `datatable` contains columns identified solely by their respective
        IDs and names. To obtain the corresponding data for these columns, you must either:
        1. Invoke the `get()` method on the specific column, or
        2. call the `get_columns()` method on the `datatable`.

        Parameters
        ----------
        id : str
            id of the requested datatable, if
        project_id : str, optional
            Optionally, to get experiments from another project as the furthrmind sdk was initiated with

        Returns
        -------
        Self
            Instance of the datatable class

        Raises
        ------
        AssertionError
            If used as class method and id not specified

        """

        if isclass(cls):
            assert id, "id must be specified"
        return cls._get(id, project_id=project_id)

    # noinspection PyMethodOverriding
    @classmethod
    def get_many(cls, ids: List[str] = (), project_id: str = "") -> List[Self]:
        """
        Method to get many datatables belonging to one project
        Columns are retrieved with id and column names only. To get the belonging data, the get method of the
        corresponding column must be called. Alternatively, the 'get_columns' method of the datatable must be
        called

        Parameters
        ----------
        ids : List[str]
            List of ids.
        project_id : str, optional
            Optionally to get datatables from another project as the furthrmind sdk was initiated with

        Returns
        -------
        List[Self]
            List of instances of the experiment class.

        Raises
        ------
        AssertionError
            If ids is not specified.
        """
        pass

        assert ids, "ids must be specified"
        return cls._get_many(ids, project_id=project_id)

    @classmethod
    def get_all(cls, project_id: str = "") -> List[Self]:

        """
        Method to get all datatables belonging to one project
        Columns are retrieved with id and column names only. To get the belonging data, the get method of the
        corresponding column must be called. Alternatively, the 'get_columns' method of the datatable must be
        called

        Parameters
        ----------
        project_id : str, optional
            Optionally to get datatables from another project as the furthrmind sdk was initiated with

        Returns
        -------
        List[Self]
            A list of instances of the DataTable class

        """
        return cls._get_all(project_id=project_id)

    def get_columns(self, column_id_list: List[str] = (), column_name_list: List[str] = ()) -> List["Column"]:
        """
        Method to get columns and their data belonging to this datatable
        If column_id_list and column_name_list are not provided, the method will retrieve all columns belonging
        to the datatable
        Updates the columns attribute of the datatable for the retrieved columns that belong to this datatable

        Parameters
        ----------
        column_id_list : List[str], optional
            A list of column IDs to retrieve. If not provided, all columns belonging to the datatable will be retrieved.
        column_name_list : List[str], optional
            A list of column names to retrieve.

        Returns
        -------
        List["Column"]
            A list of column objects.

        """

        columns = self._get_columns(column_id_list, column_name_list)
        new_column_mapping = {c.id: c for c in columns}
        new_column_list = []
        for column in self.columns:
            if column.id in new_column_mapping:
                new_column_list.append(new_column_mapping[column.id])
            else:
                new_column_list.append(column)
        self.columns = new_column_list
        return columns

    def get_pandas_dataframe(self, column_id_list: List[str] = (), column_name_list: List[str] = ()) -> DataFrame:
        """
        Method to get columns and their data as a pandas dataframe
        If column_id_list and column_name_list are not provided, the method will retrieve all columns belonging
        to the datatable

        Parameters
        ----------
        column_id_list : List[str]
            List of column IDs to retrieve. If not provided, all columns belonging to the datatable will be retrieved.
        column_name_list : List[str]
            List of column names to retrieve. If not provided, all columns belonging to the datatable will be retrieved.

        Returns
        -------
        pandas.core.frame.DataFrame
            Pandas dataframe containing the columns and their data.

        """

        columns = self._get_columns(column_id_list, column_name_list)
        new_column_mapping = {c.id: c for c in columns}
        new_column_list = []
        for column in self.columns:
            if column.id in new_column_mapping:
                new_column_list.append(new_column_mapping[column.id])
            else:
                new_column_list.append(column)
        self.columns = new_column_list

        data_dict = {}
        max_length = 0
        for c in columns:
            data_dict[c.name] = c.values
            if len(c.values) > max_length:
                max_length = len(c.values)
        for key in data_dict:
            if len(data_dict[key]) < max_length:
                data_dict[key] = data_dict[key] + [None] * (max_length - len(data_dict[key]))
        df = DataFrame.from_dict(data_dict, orient="columns")
        return df

    def _get_columns(self, column_id_list: List[str] = None, column_name_list: List[str] = None) -> List["Column"]:
        from furthrmind.collection import Column
        if column_id_list:
            column_id_list_new = []
            current_column_ids = [c.id for c in self.columns]
            for column_id in column_id_list:
                if column_id in current_column_ids:
                    column_id_list_new.append(column_id)
            column_id_list = column_id_list_new
        elif column_name_list:
            column_id_list = []
            for column in self.columns:
                if column.name in column_name_list:
                    column_id_list.append(column.id)
        else:
            column_id_list = [c.id for c in self.columns]
        columns = Column.get_many(ids=column_id_list)
        return columns

    @classmethod
    @BaseClass._create_instances_decorator(_fetched=False)
    def create(cls, name: str = "Data table", experiment_id: str = "", sample_id: str = "", researchitem_id: str = "",
               columns: List[dict] = (), project_id: str = "") -> Self:
        """
        Parameters
        ----------
        name: str
            Name of the datatable.
        experiment_id: str
            ID of the experiment where the datatable belongs to.
        sample_id: str
            ID of the sample where the datatable belongs to.
        researchitem_id: str
            ID of the researchitem where the datatable belongs to.
        columns: List[dict]
            A list of columns that should be added to the datatable. List with dicts with the following keys:
            - name: name of the column
            - type: Type of the column, Either "Text" or "Numeric". Data must fit to type, for Text all data will be converted
              to string and for Numeric all data is converted to float (if possible)
            - data: List of column values, must fit to column_type, can also be a pandas data series
            - unit: dict with id or name, or name as string, or id as string
        project_id: str
            Optionally to create an item in another project as the furthrmind sdk was initiated with

        Returns
        -------
        Self
            Instance of datatable class.

        Raises
        ------
        AssertionError
            If name is not provided.
            If experiment_id nor sample_id nor researchitem_id is not provided.
        """

        from furthrmind.collection import Column

        assert name, "Name must be specified"
        assert experiment_id or sample_id or researchitem_id, "Either experiment_id or sample_id or researchitem_id must be specified"

        column_id_list = []
        if columns:
            columns = Column.create_many(columns)
            column_id_list = [c.id for c in columns]

        data = {"name": name}
        if column_id_list:
            data["columns"] = [{"id": column_id} for column_id in column_id_list]

        if experiment_id:
            data["experiment"] = {"id": experiment_id}

        if sample_id:
            data["sample"] = {"id": sample_id}

        if researchitem_id:
            data["researchitem"] = {"id": researchitem_id}

        id = cls._post(data, project_id)
        data["id"] = id
        return data

    def add_column(self, name: str, type: str, data: List, unit: Union[Dict, str] = None, 
                   pos: int = None, project_id: str = "") -> "DataTable":
        """
        Parameters
        ----------
        name: str
            Name of the column.
        type: str
            Type of the column, Either "Text" or "Numeric". Data must fit to type, for Text all data will be converted
            to string and for Numeric all data is converted to float (if possible)
        data: List
            List of column values, must fit to column_type, can also be a pandas data series
        unit: Union[Dict, str] 
            Dict with id or name, or name as string, or id as string
        project_id: str
            Optionally to create an item in another project as the furthrmind sdk was initiated with

        Returns
        -------
        Self
            Instance of datatable class.

        Raises
        ------
        AssertionError
            If name is not provided.
            If experiment_id nor sample_id nor researchitem_id is not provided.
        """

        column = self.fm.Column.create(name, type, data, unit, project_id=project_id)
        new_column_list = [{"id": c.id} for c in self.columns]
        if pos:
            new_column_list.insert(pos, {"id": column.id})
        else:
            new_column_list.append({"id": column.id})

        data = {"id": self.id, "columns": new_column_list}
        self._post(data, project_id)

        if pos:
            self.columns.insert(pos, column)
        else:
            self.columns.append(column)
        return self

add_column(name, type, data, unit=None, pos=None, project_id='')

Parameters:

Name Type Description Default
name str

Name of the column.

required
type str

Type of the column, Either "Text" or "Numeric". Data must fit to type, for Text all data will be converted to string and for Numeric all data is converted to float (if possible)

required
data List

List of column values, must fit to column_type, can also be a pandas data series

required
unit Union[Dict, str]

Dict with id or name, or name as string, or id as string

None
project_id str

Optionally to create an item in another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
Self

Instance of datatable class.

Raises:

Type Description
AssertionError

If name is not provided. If experiment_id nor sample_id nor researchitem_id is not provided.

Source code in furthrmind\collection\datatable.py
305
306
307
308
309
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
337
338
339
340
341
342
343
344
345
346
347
348
def add_column(self, name: str, type: str, data: List, unit: Union[Dict, str] = None, 
               pos: int = None, project_id: str = "") -> "DataTable":
    """
    Parameters
    ----------
    name: str
        Name of the column.
    type: str
        Type of the column, Either "Text" or "Numeric". Data must fit to type, for Text all data will be converted
        to string and for Numeric all data is converted to float (if possible)
    data: List
        List of column values, must fit to column_type, can also be a pandas data series
    unit: Union[Dict, str] 
        Dict with id or name, or name as string, or id as string
    project_id: str
        Optionally to create an item in another project as the furthrmind sdk was initiated with

    Returns
    -------
    Self
        Instance of datatable class.

    Raises
    ------
    AssertionError
        If name is not provided.
        If experiment_id nor sample_id nor researchitem_id is not provided.
    """

    column = self.fm.Column.create(name, type, data, unit, project_id=project_id)
    new_column_list = [{"id": c.id} for c in self.columns]
    if pos:
        new_column_list.insert(pos, {"id": column.id})
    else:
        new_column_list.append({"id": column.id})

    data = {"id": self.id, "columns": new_column_list}
    self._post(data, project_id)

    if pos:
        self.columns.insert(pos, column)
    else:
        self.columns.append(column)
    return self

create(name='Data table', experiment_id='', sample_id='', researchitem_id='', columns=(), project_id='') classmethod

Parameters:

Name Type Description Default
name str

Name of the datatable.

'Data table'
experiment_id str

ID of the experiment where the datatable belongs to.

''
sample_id str

ID of the sample where the datatable belongs to.

''
researchitem_id str

ID of the researchitem where the datatable belongs to.

''
columns List[dict]

A list of columns that should be added to the datatable. List with dicts with the following keys: - name: name of the column - type: Type of the column, Either "Text" or "Numeric". Data must fit to type, for Text all data will be converted to string and for Numeric all data is converted to float (if possible) - data: List of column values, must fit to column_type, can also be a pandas data series - unit: dict with id or name, or name as string, or id as string

()
project_id str

Optionally to create an item in another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
Self

Instance of datatable class.

Raises:

Type Description
AssertionError

If name is not provided. If experiment_id nor sample_id nor researchitem_id is not provided.

Source code in furthrmind\collection\datatable.py
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
@classmethod
@BaseClass._create_instances_decorator(_fetched=False)
def create(cls, name: str = "Data table", experiment_id: str = "", sample_id: str = "", researchitem_id: str = "",
           columns: List[dict] = (), project_id: str = "") -> Self:
    """
    Parameters
    ----------
    name: str
        Name of the datatable.
    experiment_id: str
        ID of the experiment where the datatable belongs to.
    sample_id: str
        ID of the sample where the datatable belongs to.
    researchitem_id: str
        ID of the researchitem where the datatable belongs to.
    columns: List[dict]
        A list of columns that should be added to the datatable. List with dicts with the following keys:
        - name: name of the column
        - type: Type of the column, Either "Text" or "Numeric". Data must fit to type, for Text all data will be converted
          to string and for Numeric all data is converted to float (if possible)
        - data: List of column values, must fit to column_type, can also be a pandas data series
        - unit: dict with id or name, or name as string, or id as string
    project_id: str
        Optionally to create an item in another project as the furthrmind sdk was initiated with

    Returns
    -------
    Self
        Instance of datatable class.

    Raises
    ------
    AssertionError
        If name is not provided.
        If experiment_id nor sample_id nor researchitem_id is not provided.
    """

    from furthrmind.collection import Column

    assert name, "Name must be specified"
    assert experiment_id or sample_id or researchitem_id, "Either experiment_id or sample_id or researchitem_id must be specified"

    column_id_list = []
    if columns:
        columns = Column.create_many(columns)
        column_id_list = [c.id for c in columns]

    data = {"name": name}
    if column_id_list:
        data["columns"] = [{"id": column_id} for column_id in column_id_list]

    if experiment_id:
        data["experiment"] = {"id": experiment_id}

    if sample_id:
        data["sample"] = {"id": sample_id}

    if researchitem_id:
        data["researchitem"] = {"id": researchitem_id}

    id = cls._post(data, project_id)
    data["id"] = id
    return data

delete(id='', project_id='') classmethod

Method to delete an item. Can be called as a classmethod with providing the id to be deleted or on the instance of a class

Parameters:

Name Type Description Default
id str

The id of the resource to delete

''
project_id str

Optionally to delete an item in another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
str

The id of the item

Source code in furthrmind\collection\baseclass.py
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
@classmethod
def delete(cls, id: str = "", project_id: str = "") -> str:
    """
    Method to delete an item. Can be called as a classmethod with providing the id to be deleted or on the instance
    of a class

    Parameters
    ----------
    id : str
        The id of the resource to delete
    project_id : str, optional
        Optionally to delete an item in another project as the furthrmind sdk was initiated with

    Returns
    -------
    str
        The id of the item
    """

    if isclass(cls):
        return cls._delete_class_method(id, project_id)
    else:
        self = cls
        return self._delete_instance_method(project_id)

get(id='', project_id='') classmethod

This method retrieves a singular datatable using its ID. If this method is invoked on an instance of the class, the instance's ID is utilized. The retrieved datatable contains columns identified solely by their respective IDs and names. To obtain the corresponding data for these columns, you must either: 1. Invoke the get() method on the specific column, or 2. call the get_columns() method on the datatable.

Parameters:

Name Type Description Default
id str

id of the requested datatable, if

''
project_id str

Optionally, to get experiments from another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
Self

Instance of the datatable class

Raises:

Type Description
AssertionError

If used as class method and id not specified

Source code in furthrmind\collection\datatable.py
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
@classmethod
def get(cls, id: str = "", project_id: str = "") -> Self:
    """
    This method retrieves a singular `datatable` using its ID. If this method is invoked on an instance of the class,
    the instance's ID is utilized. The retrieved `datatable` contains columns identified solely by their respective
    IDs and names. To obtain the corresponding data for these columns, you must either:
    1. Invoke the `get()` method on the specific column, or
    2. call the `get_columns()` method on the `datatable`.

    Parameters
    ----------
    id : str
        id of the requested datatable, if
    project_id : str, optional
        Optionally, to get experiments from another project as the furthrmind sdk was initiated with

    Returns
    -------
    Self
        Instance of the datatable class

    Raises
    ------
    AssertionError
        If used as class method and id not specified

    """

    if isclass(cls):
        assert id, "id must be specified"
    return cls._get(id, project_id=project_id)

get_all(project_id='') classmethod

Method to get all datatables belonging to one project Columns are retrieved with id and column names only. To get the belonging data, the get method of the corresponding column must be called. Alternatively, the 'get_columns' method of the datatable must be called

Parameters:

Name Type Description Default
project_id str

Optionally to get datatables from another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
List[Self]

A list of instances of the DataTable class

Source code in furthrmind\collection\datatable.py
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
@classmethod
def get_all(cls, project_id: str = "") -> List[Self]:

    """
    Method to get all datatables belonging to one project
    Columns are retrieved with id and column names only. To get the belonging data, the get method of the
    corresponding column must be called. Alternatively, the 'get_columns' method of the datatable must be
    called

    Parameters
    ----------
    project_id : str, optional
        Optionally to get datatables from another project as the furthrmind sdk was initiated with

    Returns
    -------
    List[Self]
        A list of instances of the DataTable class

    """
    return cls._get_all(project_id=project_id)

get_columns(column_id_list=(), column_name_list=())

Method to get columns and their data belonging to this datatable If column_id_list and column_name_list are not provided, the method will retrieve all columns belonging to the datatable Updates the columns attribute of the datatable for the retrieved columns that belong to this datatable

Parameters:

Name Type Description Default
column_id_list List[str]

A list of column IDs to retrieve. If not provided, all columns belonging to the datatable will be retrieved.

()
column_name_list List[str]

A list of column names to retrieve.

()

Returns:

Type Description
List[Column]

A list of column objects.

Source code in furthrmind\collection\datatable.py
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
def get_columns(self, column_id_list: List[str] = (), column_name_list: List[str] = ()) -> List["Column"]:
    """
    Method to get columns and their data belonging to this datatable
    If column_id_list and column_name_list are not provided, the method will retrieve all columns belonging
    to the datatable
    Updates the columns attribute of the datatable for the retrieved columns that belong to this datatable

    Parameters
    ----------
    column_id_list : List[str], optional
        A list of column IDs to retrieve. If not provided, all columns belonging to the datatable will be retrieved.
    column_name_list : List[str], optional
        A list of column names to retrieve.

    Returns
    -------
    List["Column"]
        A list of column objects.

    """

    columns = self._get_columns(column_id_list, column_name_list)
    new_column_mapping = {c.id: c for c in columns}
    new_column_list = []
    for column in self.columns:
        if column.id in new_column_mapping:
            new_column_list.append(new_column_mapping[column.id])
        else:
            new_column_list.append(column)
    self.columns = new_column_list
    return columns

get_many(ids=(), project_id='') classmethod

Method to get many datatables belonging to one project Columns are retrieved with id and column names only. To get the belonging data, the get method of the corresponding column must be called. Alternatively, the 'get_columns' method of the datatable must be called

Parameters:

Name Type Description Default
ids List[str]

List of ids.

()
project_id str

Optionally to get datatables from another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
List[Self]

List of instances of the experiment class.

Raises:

Type Description
AssertionError

If ids is not specified.

Source code in furthrmind\collection\datatable.py
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
@classmethod
def get_many(cls, ids: List[str] = (), project_id: str = "") -> List[Self]:
    """
    Method to get many datatables belonging to one project
    Columns are retrieved with id and column names only. To get the belonging data, the get method of the
    corresponding column must be called. Alternatively, the 'get_columns' method of the datatable must be
    called

    Parameters
    ----------
    ids : List[str]
        List of ids.
    project_id : str, optional
        Optionally to get datatables from another project as the furthrmind sdk was initiated with

    Returns
    -------
    List[Self]
        List of instances of the experiment class.

    Raises
    ------
    AssertionError
        If ids is not specified.
    """
    pass

    assert ids, "ids must be specified"
    return cls._get_many(ids, project_id=project_id)

get_pandas_dataframe(column_id_list=(), column_name_list=())

Method to get columns and their data as a pandas dataframe If column_id_list and column_name_list are not provided, the method will retrieve all columns belonging to the datatable

Parameters:

Name Type Description Default
column_id_list List[str]

List of column IDs to retrieve. If not provided, all columns belonging to the datatable will be retrieved.

()
column_name_list List[str]

List of column names to retrieve. If not provided, all columns belonging to the datatable will be retrieved.

()

Returns:

Type Description
DataFrame

Pandas dataframe containing the columns and their data.

Source code in furthrmind\collection\datatable.py
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
def get_pandas_dataframe(self, column_id_list: List[str] = (), column_name_list: List[str] = ()) -> DataFrame:
    """
    Method to get columns and their data as a pandas dataframe
    If column_id_list and column_name_list are not provided, the method will retrieve all columns belonging
    to the datatable

    Parameters
    ----------
    column_id_list : List[str]
        List of column IDs to retrieve. If not provided, all columns belonging to the datatable will be retrieved.
    column_name_list : List[str]
        List of column names to retrieve. If not provided, all columns belonging to the datatable will be retrieved.

    Returns
    -------
    pandas.core.frame.DataFrame
        Pandas dataframe containing the columns and their data.

    """

    columns = self._get_columns(column_id_list, column_name_list)
    new_column_mapping = {c.id: c for c in columns}
    new_column_list = []
    for column in self.columns:
        if column.id in new_column_mapping:
            new_column_list.append(new_column_mapping[column.id])
        else:
            new_column_list.append(column)
    self.columns = new_column_list

    data_dict = {}
    max_length = 0
    for c in columns:
        data_dict[c.name] = c.values
        if len(c.values) > max_length:
            max_length = len(c.values)
    for key in data_dict:
        if len(data_dict[key]) < max_length:
            data_dict[key] = data_dict[key] + [None] * (max_length - len(data_dict[key]))
    df = DataFrame.from_dict(data_dict, orient="columns")
    return df

to_dict()

Converts the object's attributes to a dictionary representation.

Returns:

Type Description
dict

Dictionary containing the object's attributes (excluding private attributes, callable attributes, and attributes of type Furthrmind).

Source code in furthrmind\collection\baseclass.py
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
def to_dict(self):
    """
    Converts the object's attributes to a dictionary representation.

    Returns
    -------
    dict
        Dictionary containing the object's attributes (excluding private attributes, callable attributes, and attributes of type Furthrmind).
    """

    from furthrmind import Furthrmind

    data = {}
    for attr in dir(self):
        if attr.startswith("_"):
            continue
        value = getattr(self, attr)
        if callable(value):
            continue
        if isinstance(value, Furthrmind):
            continue
        data[attr] = self._convert(value)
    return data