|Next release:||Version 0.9.0|
|Previous release:||Version 0.7.0|
Frame objects can now be pickled using the standard Python
pickleinterface. #1444 This also has an added benefit of reducing the potential for a deadlock when using the
The primary datatable expression
DT[i, j, ...]is now evaluated entirely in C++, improving performance and reliability.
The column selector
DT[i, j]can now be a list/iterator of booleans. This list should have length
DT.ncols, and the entries in this list will indicate whether to select the corresponding column of the Frame or not. #1503 This can be used to implement a simple column filter, for example:
del DT[:, (name.endswith("_tmp") for name in DT.names)]
Implemented sorting in reverse direction, via
colis any regular column selector such as
-sign is symbolic, no actual negation occurs. As such, this works even for string columns. #792
The equality operators
!=can now be applied to string columns too. #1491
Partial column update (i.e. expression of the form
DT[i, j] = R) now works for string columns as well. #1523
Improved the performance of setting
.nrows. Now if the frame has multiple columns, a view will be created.
Fixed rendering of “view” Frames in a Jupyter notebook. This bug caused the frame to display wrong data when viewed in a notebook. #1448
Fixed crash when an int-column
iselector is applied to a Frame which already had another row filter applied. #1437
g.-column is used but there is no join frame, an appropriate error message is now emitted. #1481
Fixed crash when viewing a frame obtained by resizing a 0-row frame. #1527
Fixed groupby when it is applied to a Frame with view columns. #1542
When replacing an empty set of columns, the replacement frame can now be also empty (i.e. have shape
[0 x 0]). #1544
Fixed join results when join is applied to a view frame. #1540
A 0-row integer column can now be used as
DT[i, j]. #1551
A string column produced from a partial join now materializes correctly. #1556
Fixed incorrect result during “true division” of integer columns, when one of the values was negative and the other positive. #1562
Fixed crash when the RHS of assignment
DT[i, j] = Rwas a list of expressions. #1539
DT[:, :, by(...)]no longer produces duplicates of columns used in the by-clause. #1576
In certain circumstances mixing computed and plain columns under groupby caused incorrect result. #1578
Fixed an internal error which was occurring when multiple row filters were applied to a Frame in sequence. #1592
Fixed rbinding of frames if one of them was a slice with a negative step. #1594
Fixed invalid result when cbinding several 0-row frames. #1604
.nrowsnow always pads the frame with NAs, even if the frame has only 1 row. Previously changing
.nrowson a 1-row frame caused its value to be repeated. Use
.repeat()in order to expand the frame by copying its values.
When no columns are selected in
DT[i, j], the returned frame will now have the same number of rows as if at least 1 column was selected. Previously an empty
[0 x 0]frame was returned.
Assigning a value to a column
DT[:, 'A'] = xwill attempt to preserve the column’s stype; or if not possible, the column will be upcasted within its logical type.
It is no longer possible to assign a value of an incompatible logical type to an existing column. For example, an assignment
DT[:, 'A'] = 3is now legal only if column A is of integer or real type, but will raise an exception if A is a boolean or string.
Calling a frame object
DT(rows=i, select=j, groupby=g, join=z, sort=s)is now deprecated. Use the expression
DT[i, j, by(g), join(z), sort(s)]instead, where symbols
dt.sort()can all be imported from the
Single-item Frame selectors are now prohibited:
DT[col]is an error. In the future this expression will be interpreted as a row selector instead. Update: in version 0.9.0 this “single-selector” syntax was reinstated, but only for integer and string selectors.
Internally, we now allow each Column in a Frame to have its own separate RowIndex. This will improve the performance, especially in join/cbind operations. Applications that use the
datatable’s C API may need to be updated to account for this. #1188
Installation from source distribution now works as expected. #1451
The build process on MacOS now ensures that the
libomp.dylibis properly referenced via
@rpath. This prevents installation problems caused by the dynamic dependencies referenced by their absolute paths which are not valid outside of the build machine. #1559
Fixed a crash that occurred with the latest
datatablenow uses integration with Codacy to keep track of code quality and potential errors.
This release was created with the help of 6 people who contributed code and documentation, and 12 more people who submitted bug reports and feature requests.
Code & documentation contributors: