@@ -20,12 +20,13 @@ import org.jetbrains.kotlinx.dataframe.api.ParserOptions
20
20
import org.jetbrains.kotlinx.dataframe.api.asColumnGroup
21
21
import org.jetbrains.kotlinx.dataframe.api.asDataColumn
22
22
import org.jetbrains.kotlinx.dataframe.api.cast
23
- import org.jetbrains.kotlinx.dataframe.api.emptyDataFrame
24
- import org.jetbrains.kotlinx.dataframe.api.getColumnsWithPaths
23
+ import org.jetbrains.kotlinx.dataframe.api.convert
25
24
import org.jetbrains.kotlinx.dataframe.api.isColumnGroup
26
25
import org.jetbrains.kotlinx.dataframe.api.isFrameColumn
27
26
import org.jetbrains.kotlinx.dataframe.api.isSubtypeOf
28
- import org.jetbrains.kotlinx.dataframe.api.toColumn
27
+ import org.jetbrains.kotlinx.dataframe.api.map
28
+ import org.jetbrains.kotlinx.dataframe.api.parse
29
+ import org.jetbrains.kotlinx.dataframe.api.to
29
30
import org.jetbrains.kotlinx.dataframe.api.tryParse
30
31
import org.jetbrains.kotlinx.dataframe.columns.TypeSuggestion
31
32
import org.jetbrains.kotlinx.dataframe.columns.size
@@ -531,17 +532,16 @@ internal fun <T> DataColumn<String?>.parse(parser: StringParser<T>, options: Par
531
532
)
532
533
}
533
534
534
- internal fun <T > DataFrame<T>.parseImpl (options : ParserOptions ? , columns : ColumnsSelector <T , Any ?>): DataFrame <T > {
535
- val convertedCols = getColumnsWithPaths (columns).map { col ->
535
+ internal fun <T > DataFrame<T>.parseImpl (options : ParserOptions ? , columns : ColumnsSelector <T , Any ?>): DataFrame <T > =
536
+ convert (columns).to { col ->
536
537
when {
537
538
// when a frame column is requested to be parsed,
538
539
// parse each value/frame column at any depth inside each DataFrame in the frame column
539
- col.isFrameColumn() ->
540
- col.values.map {
541
- it.parseImpl(options) {
542
- colsAtAnyDepth { ! it.isColumnGroup() }
543
- }
544
- }.toColumn(col.name)
540
+ col.isFrameColumn() -> col.map {
541
+ it.parseImpl(options) {
542
+ colsAtAnyDepth { ! it.isColumnGroup() }
543
+ }
544
+ }
545
545
546
546
// when a column group is requested to be parsed,
547
547
// parse each column in the group
@@ -552,11 +552,8 @@ internal fun <T> DataFrame<T>.parseImpl(options: ParserOptions?, columns: Column
552
552
553
553
// Base case, parse the column if it's a `String?` column
554
554
col.isSubtypeOf<String ?>() ->
555
- col.cast<String ?>().tryParse (options)
555
+ col.cast<String ?>().tryParseImpl (options)
556
556
557
557
else -> col
558
- }. let { ColumnToInsert (col.path, it) }
558
+ }
559
559
}
560
-
561
- return emptyDataFrame<T >().insertImpl(convertedCols)
562
- }
0 commit comments