convert
Returns DataFrame
with changed values in some columns. Allows changing column types.
convert { columnsSelector }
.with { rowExpression } | .asFrame { frameExpression } | .perRowCol { rowColExpression } | to<Type>() | to { colExpression }
rowExpression = DataRow.(OldValue) -> NewValue
rowColExpression = (DataRow, DataColumn) -> NewValue
colExpression = DataFrame.(DataColumn) -> DataColumn
frameExpression: DataFrame.(DataFrame) -> DataFrame
See column selectors for how to select the columns for this operation and row expressions for how to provide new values.
df.convert { age }.with { it.toDouble() }
df.convert { colsAtAnyDepth().colsOf<String>() }.with { it.toCharArray().toList() }
ColumnGroup can be converted using DataFrame API, for example:
df.convert { name }.asFrame { it.add("fullName") { "$firstName $lastName" } }
Similar to replace with
operation, columns can be converted in a compiler plugin-friendly fashion whenever you need to perform an operation on the entire column without changing its name. For example, parallel reading.
df.convert { name }.asColumn { col ->
col.toList().parallelStream().map { it.toString() }.collect(Collectors.toList()).toColumn()
}
convert
supports automatic type conversions between the following types:
String
(uses parse
to convert from String
to other types)
Boolean
Byte
Short
Int
(and Char
)
Long
Float
Double
(See parsing doubles for String
to Double
conversion)
BigDecimal
BigInteger
LocalDateTime
(kotlinx.datetime and java.time)
LocalDate
(kotlinx.datetime and java.time)
LocalTime
(kotlinx.datetime and java.time)
Instant
(kotlinx.datetime and java.time)
df.convert { age }.to<Double>()
df.convert { colsOf<Number>() }.to<String>()
df.convert { name.firstName and name.lastName }.asColumn { it.length() }
df.convert { weight }.toFloat()
Automatic conversion from String
to enum classes is also supported:
enum class Direction { NORTH, SOUTH, WEST, EAST }
dataFrameOf("direction")("NORTH", "WEST")
.convert("direction").to<Direction>()
And finally, Value classes can be used with convert
too. Both as conversion source and target:
@JvmInline
value class IntClass(val value: Int)
dataFrameOf("value")("1", "2") // note that values are strings; conversion is done automatically
.convert("value").to<IntClass>()
02 June 2025