Skip to content

Commit 28088ea

Browse files
committed
[Compiler plugin] Support for dropNA
1 parent bddf7bf commit 28088ea

File tree

5 files changed

+39
-1
lines changed

5 files changed

+39
-1
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/Nulls.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,8 @@ private interface CommonDropNAFunctionDoc
435435
* @include [DropNA.WhereAllNAParam]
436436
* @include [DropDslParam]
437437
*/
438+
@Refine
439+
@Interpretable("DropNa0")
438440
public fun <T> DataFrame<T>.dropNA(whereAllNA: Boolean = false, columns: ColumnsSelector<T, *>): DataFrame<T> {
439441
val cols = this[columns]
440442
return if (whereAllNA) {
Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import org.jetbrains.kotlinx.dataframe.plugin.extensions.Marker
99
import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractSchemaModificationInterpreter
1010
import org.jetbrains.kotlinx.dataframe.plugin.impl.Arguments
1111
import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema
12+
import org.jetbrains.kotlinx.dataframe.plugin.impl.Present
1213
import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleCol
1314
import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleColumnGroup
1415
import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleDataColumn
15-
import org.jetbrains.kotlinx.dataframe.plugin.impl.data.ColumnWithPathApproximation
1616
import org.jetbrains.kotlinx.dataframe.plugin.impl.dataFrame
1717

1818
class DropNulls0 : AbstractSchemaModificationInterpreter() {
@@ -24,6 +24,17 @@ class DropNulls0 : AbstractSchemaModificationInterpreter() {
2424
}
2525
}
2626

27+
class DropNa0 : AbstractSchemaModificationInterpreter() {
28+
val Arguments.receiver: PluginDataFrameSchema by dataFrame()
29+
val Arguments.whereAllNA: Boolean by arg(defaultValue = Present(false))
30+
val Arguments.columns: ColumnsResolver by arg()
31+
32+
override fun Arguments.interpret(): PluginDataFrameSchema {
33+
if (whereAllNA) return receiver
34+
return PluginDataFrameSchema(fillNullsImpl(receiver.columns(), columns.resolve(receiver).mapTo(mutableSetOf()) { it.path.path }, emptyList()))
35+
}
36+
}
37+
2738
fun KotlinTypeFacade.fillNullsImpl(
2839
columns: List<SimpleCol>,
2940
paths: Set<List<String>>,

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.api.DataFrameBuilderInvoke0
8383
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.DataFrameOf0
8484
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.DataFrameOf3
8585
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.DataRowReadJsonStr
86+
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.DropNa0
8687
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.FillNulls0
8788
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.Flatten0
8889
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.FlattenDefault
@@ -223,6 +224,7 @@ internal inline fun <reified T> String.load(): T {
223224
"Into0" -> Into0()
224225
"Ungroup0" -> Ungroup0()
225226
"DropNulls0" -> DropNulls0()
227+
"DropNa0" -> DropNa0()
226228
"Properties0" -> Properties0()
227229
"Preserve0" -> Preserve0()
228230
"Preserve1" -> Preserve1()
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import org.jetbrains.kotlinx.dataframe.*
2+
import org.jetbrains.kotlinx.dataframe.annotations.*
3+
import org.jetbrains.kotlinx.dataframe.api.*
4+
import org.jetbrains.kotlinx.dataframe.io.*
5+
6+
fun box(): String {
7+
val df = dataFrameOf(
8+
"a" to listOf(1, null, 3),
9+
"b" to listOf(null, 5, 6)
10+
)
11+
val df1 = df.dropNA { a and b }
12+
df1.compareSchemas(strict = true)
13+
14+
val df2 = df.dropNA(whereAllNA = true) { a and b }
15+
df2.compareSchemas(strict = true)
16+
return "OK"
17+
}

plugins/kotlin-dataframe/tests-gen/org/jetbrains/kotlin/fir/dataframe/DataFrameBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,12 @@ public void testDiff() {
130130
runTest("testData/box/diff.kt");
131131
}
132132

133+
@Test
134+
@TestMetadata("dropNA.kt")
135+
public void testDropNA() {
136+
runTest("testData/box/dropNA.kt");
137+
}
138+
133139
@Test
134140
@TestMetadata("dropNulls.kt")
135141
public void testDropNulls() {

0 commit comments

Comments
 (0)