convert
Edit page Last modified: 14 January 2025Returns 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 and row expressions
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" } }
convert
supports automatic type conversions between the following types:
String
(usesparse
to convert fromString
to other types)Boolean
Byte
Short
Int
(andChar
)Long
Float
Double
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 }.to { 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>()