Skip to content

Commit 64b9280

Browse files
Fixed #257. DataSeries>> #removeNils now removes nil values from a data series and #withoutNils returns a copy of the data series without nils.
1 parent 198d818 commit 64b9280

2 files changed

Lines changed: 54 additions & 14 deletions

File tree

src/DataFrame-Tests/DataSeriesTest.class.st

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1783,22 +1783,28 @@ DataSeriesTest >> testRemoveDuplicates [
17831783
DataSeriesTest >> testRemoveNils [
17841784

17851785
| expected |
1786-
1787-
series := DataSeries withKeys: #(1 2 'a' 3) values: #(nil 4.2 'b' nil).
1788-
expected := DataSeries withKeys: #(2 'a') values: #(4.2 'b').
1789-
1790-
self assert: series removeNils equals: expected
1786+
series := DataSeries
1787+
withKeys: #( 1 2 'a' 3 )
1788+
values: #( nil 4.2 'b' nil ).
1789+
expected := DataSeries withKeys: #( 2 'a' ) values: #( 4.2 'b' ).
1790+
self assert: series removeNils equals: expected.
1791+
self assert: series equals: expected
17911792
]
17921793

17931794
{ #category : #'tests - removing' }
17941795
DataSeriesTest >> testRemoveNilsOnNamedSeries [
17951796

17961797
| expected |
1797-
1798-
series := DataSeries withKeys: #(1 2 'a' 3) values: #(nil 4.2 'b' nil) name: 'A'.
1799-
expected := DataSeries withKeys: #(2 'a') values: #(4.2 'b') name: 'A'.
1800-
1801-
self assert: series removeNils equals: expected
1798+
series := DataSeries
1799+
withKeys: #( 1 2 'a' 3 )
1800+
values: #( nil 4.2 'b' nil )
1801+
name: 'A'.
1802+
expected := DataSeries
1803+
withKeys: #( 2 'a' )
1804+
values: #( 4.2 'b' )
1805+
name: 'A'.
1806+
self assert: series removeNils equals: expected.
1807+
self assert: series equals: expected
18021808
]
18031809

18041810
{ #category : #'tests - missing values' }
@@ -2484,3 +2490,33 @@ DataSeriesTest >> testWithKeySelect [
24842490
actual := series withKeySelect: [ :x :k | x < 10 and: (#(a c g) includes: k) ].
24852491
self assert: actual equals: expected
24862492
]
2493+
2494+
{ #category : #tests }
2495+
DataSeriesTest >> testWithoutNils [
2496+
2497+
| expected |
2498+
series := DataSeries
2499+
withKeys: #( 1 2 'a' 3 )
2500+
values: #( nil 4.2 'b' nil ).
2501+
expected := DataSeries withKeys: #( 2 'a' ) values: #( 4.2 'b' ).
2502+
2503+
self assert: series withoutNils equals: expected.
2504+
self deny: series equals: expected
2505+
]
2506+
2507+
{ #category : #tests }
2508+
DataSeriesTest >> testWithoutNilsOnNamedSeries [
2509+
2510+
| expected |
2511+
series := DataSeries
2512+
withKeys: #( 1 2 'a' 3 )
2513+
values: #( nil 4.2 'b' nil )
2514+
name: 'A'.
2515+
expected := DataSeries
2516+
withKeys: #( 2 'a' )
2517+
values: #( 4.2 'b' )
2518+
name: 'A'.
2519+
2520+
self assert: series withoutNils equals: expected.
2521+
self deny: series equals: expected
2522+
]

src/DataFrame/DataSeries.class.st

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -639,8 +639,12 @@ DataSeries >> removeDuplicates [
639639
{ #category : #removing }
640640
DataSeries >> removeNils [
641641
"Removes elements with nil values from the data series"
642-
643-
^ self reject: [ :ele | ele isNil ]
642+
643+
| keysWithNilValues |
644+
keysWithNilValues := OrderedCollection new.
645+
self associationsDo: [ :each |
646+
each value ifNil: [ keysWithNilValues add: each key ] ].
647+
self removeKeys: keysWithNilValues
644648
]
645649

646650
{ #category : #replacing }
@@ -1026,8 +1030,8 @@ DataSeries >> withSeries: otherDataSeries collect: twoArgBlock [
10261030

10271031
{ #category : #private }
10281032
DataSeries >> withoutNils [
1029-
"Returns a data series without the elements whose values were nil values"
1030-
1033+
"Returns a copy of the data series without the nil values"
1034+
10311035
^ self reject: #isNil
10321036
]
10331037

0 commit comments

Comments
 (0)