@@ -1947,84 +1947,176 @@ public void TestMutationOnRows()
1947
1947
}
1948
1948
}
1949
1949
1950
+ [ Fact ]
1951
+ public void TestAppendRows ( )
1952
+ {
1953
+ DataFrame df = MakeDataFrame < float , bool > ( 10 ) ;
1954
+ DataFrame df2 = MakeDataFrame < int , bool > ( 5 ) ;
1955
+ Assert . Equal ( 10 , df . Rows . Count ) ;
1956
+ Assert . Equal ( 1 , df . Columns [ 0 ] . NullCount ) ;
1957
+ Assert . Equal ( 1 , df . Columns [ 1 ] . NullCount ) ;
1958
+
1959
+ DataFrame ret = df . Append ( df2 . Rows , inPlace : false ) ;
1960
+ Assert . Equal ( 10 , df . Rows . Count ) ;
1961
+ Assert . Equal ( 1 , df . Columns [ 0 ] . NullCount ) ;
1962
+ Assert . Equal ( 1 , df . Columns [ 1 ] . NullCount ) ;
1963
+
1964
+ Verify ( ret , df , df2 ) ;
1965
+
1966
+ void Verify ( DataFrame ret , DataFrame check1 , DataFrame check2 )
1967
+ {
1968
+ Assert . Equal ( 15 , ret . Rows . Count ) ;
1969
+ Assert . Equal ( 2 , ret . Columns [ 0 ] . NullCount ) ;
1970
+ Assert . Equal ( 2 , ret . Columns [ 1 ] . NullCount ) ;
1971
+ for ( long i = 0 ; i < ret . Rows . Count ; i ++ )
1972
+ {
1973
+ DataFrameRow row = ret . Rows [ i ] ;
1974
+ for ( int j = 0 ; j < check1 . Columns . Count ; j ++ )
1975
+ {
1976
+ if ( i < check1 . Rows . Count )
1977
+ {
1978
+ Assert . Equal ( row [ j ] , check1 . Rows [ i ] [ j ] ) ;
1979
+ }
1980
+ else
1981
+ {
1982
+ Assert . Equal ( row [ j ] ? . ToString ( ) , ( check2 . Rows [ i - check1 . Rows . Count ] [ j ] ) ? . ToString ( ) ) ;
1983
+ }
1984
+ }
1985
+ }
1986
+ }
1987
+
1988
+ DataFrame dfClone = df . Clone ( ) ;
1989
+ df . Append ( df2 . Rows , inPlace : true ) ;
1990
+ Verify ( df , dfClone , df2 ) ;
1991
+ }
1992
+
1950
1993
[ Fact ]
1951
1994
public void TestAppendRow ( )
1952
1995
{
1953
1996
DataFrame df = MakeDataFrame < int , bool > ( 10 ) ;
1954
- df . Append ( new List < object > { 5 , true } ) ;
1997
+ df . Append ( new List < object > { 5 , true } , inPlace : true ) ;
1955
1998
Assert . Equal ( 11 , df . Rows . Count ) ;
1956
1999
Assert . Equal ( 1 , df . Columns [ 0 ] . NullCount ) ;
1957
2000
Assert . Equal ( 1 , df . Columns [ 1 ] . NullCount ) ;
1958
2001
1959
- df . Append ( new List < object > { 100 } ) ;
2002
+ DataFrame ret = df . Append ( new List < object > { 5 , true } ) ;
2003
+ Assert . Equal ( 12 , ret . Rows . Count ) ;
2004
+ Assert . Equal ( 1 , ret . Columns [ 0 ] . NullCount ) ;
2005
+ Assert . Equal ( 1 , ret . Columns [ 1 ] . NullCount ) ;
2006
+
2007
+ df . Append ( new List < object > { 100 } , inPlace : true ) ;
1960
2008
Assert . Equal ( 12 , df . Rows . Count ) ;
1961
2009
Assert . Equal ( 1 , df . Columns [ 0 ] . NullCount ) ;
1962
2010
Assert . Equal ( 2 , df . Columns [ 1 ] . NullCount ) ;
1963
2011
1964
- df . Append ( new List < object > { null , null } ) ;
2012
+ ret = df . Append ( new List < object > { 100 } , inPlace : false ) ;
2013
+ Assert . Equal ( 13 , ret . Rows . Count ) ;
2014
+ Assert . Equal ( 1 , ret . Columns [ 0 ] . NullCount ) ;
2015
+ Assert . Equal ( 3 , ret . Columns [ 1 ] . NullCount ) ;
2016
+
2017
+ df . Append ( new List < object > { null , null } , inPlace : true ) ;
1965
2018
Assert . Equal ( 13 , df . Rows . Count ) ;
1966
2019
Assert . Equal ( 2 , df . Columns [ 0 ] . NullCount ) ;
1967
2020
Assert . Equal ( 3 , df . Columns [ 1 ] . NullCount ) ;
2021
+ ret = df . Append ( new List < object > { null , null } , inPlace : false ) ;
2022
+ Assert . Equal ( 14 , ret . Rows . Count ) ;
2023
+ Assert . Equal ( 3 , ret . Columns [ 0 ] . NullCount ) ;
2024
+ Assert . Equal ( 4 , ret . Columns [ 1 ] . NullCount ) ;
1968
2025
1969
- df . Append ( new Dictionary < string , object > { { "Column1" , ( object ) 5 } , { "Column2" , false } } ) ;
2026
+ df . Append ( new Dictionary < string , object > { { "Column1" , ( object ) 5 } , { "Column2" , false } } , inPlace : true ) ;
1970
2027
Assert . Equal ( 14 , df . Rows . Count ) ;
1971
2028
Assert . Equal ( 2 , df . Columns [ 0 ] . NullCount ) ;
1972
2029
Assert . Equal ( 3 , df . Columns [ 1 ] . NullCount ) ;
2030
+ ret = df . Append ( new Dictionary < string , object > { { "Column1" , ( object ) 5 } , { "Column2" , false } } , inPlace : false ) ;
2031
+ Assert . Equal ( 15 , ret . Rows . Count ) ;
2032
+ Assert . Equal ( 2 , ret . Columns [ 0 ] . NullCount ) ;
2033
+ Assert . Equal ( 3 , ret . Columns [ 1 ] . NullCount ) ;
1973
2034
1974
- df . Append ( new Dictionary < string , object > { { "Column1" , 5 } } ) ;
2035
+ df . Append ( new Dictionary < string , object > { { "Column1" , 5 } } , inPlace : true ) ;
1975
2036
Assert . Equal ( 15 , df . Rows . Count ) ;
1976
2037
1977
2038
Assert . Equal ( 15 , df [ "Column1" ] . Length ) ;
1978
2039
Assert . Equal ( 15 , df [ "Column2" ] . Length ) ;
1979
2040
Assert . Equal ( 2 , df . Columns [ 0 ] . NullCount ) ;
1980
2041
Assert . Equal ( 4 , df . Columns [ 1 ] . NullCount ) ;
2042
+ ret = df . Append ( new Dictionary < string , object > { { "Column1" , 5 } } , inPlace : false ) ;
2043
+ Assert . Equal ( 16 , ret . Rows . Count ) ;
1981
2044
1982
- df . Append ( new Dictionary < string , object > { { "Column2" , false } } ) ;
2045
+ Assert . Equal ( 16 , ret [ "Column1" ] . Length ) ;
2046
+ Assert . Equal ( 16 , ret [ "Column2" ] . Length ) ;
2047
+ Assert . Equal ( 2 , ret . Columns [ 0 ] . NullCount ) ;
2048
+ Assert . Equal ( 5 , ret . Columns [ 1 ] . NullCount ) ;
2049
+
2050
+ df . Append ( new Dictionary < string , object > { { "Column2" , false } } , inPlace : true ) ;
1983
2051
Assert . Equal ( 16 , df . Rows . Count ) ;
1984
2052
Assert . Equal ( 16 , df [ "Column1" ] . Length ) ;
1985
2053
Assert . Equal ( 16 , df [ "Column2" ] . Length ) ;
1986
2054
Assert . Equal ( 3 , df . Columns [ 0 ] . NullCount ) ;
1987
2055
Assert . Equal ( 4 , df . Columns [ 1 ] . NullCount ) ;
1988
-
1989
- df . Append ( ( IEnumerable < object > ) null ) ;
2056
+ ret = df . Append ( new Dictionary < string , object > { { "Column2" , false } } , inPlace : false ) ;
2057
+ Assert . Equal ( 17 , ret . Rows . Count ) ;
2058
+ Assert . Equal ( 17 , ret [ "Column1" ] . Length ) ;
2059
+ Assert . Equal ( 17 , ret [ "Column2" ] . Length ) ;
2060
+ Assert . Equal ( 4 , ret . Columns [ 0 ] . NullCount ) ;
2061
+ Assert . Equal ( 4 , ret . Columns [ 1 ] . NullCount ) ;
2062
+
2063
+ df . Append ( ( IEnumerable < object > ) null , inPlace : true ) ;
1990
2064
Assert . Equal ( 17 , df . Rows . Count ) ;
1991
2065
Assert . Equal ( 17 , df [ "Column1" ] . Length ) ;
1992
2066
Assert . Equal ( 17 , df [ "Column2" ] . Length ) ;
1993
2067
Assert . Equal ( 4 , df . Columns [ 0 ] . NullCount ) ;
1994
2068
Assert . Equal ( 5 , df . Columns [ 1 ] . NullCount ) ;
2069
+ ret = df . Append ( ( IEnumerable < object > ) null , inPlace : false ) ;
2070
+ Assert . Equal ( 18 , ret . Rows . Count ) ;
2071
+ Assert . Equal ( 18 , ret [ "Column1" ] . Length ) ;
2072
+ Assert . Equal ( 18 , ret [ "Column2" ] . Length ) ;
2073
+ Assert . Equal ( 5 , ret . Columns [ 0 ] . NullCount ) ;
2074
+ Assert . Equal ( 6 , ret . Columns [ 1 ] . NullCount ) ;
1995
2075
1996
2076
// DataFrame must remain usable even if Append throws
1997
- Assert . Throws < FormatException > ( ( ) => df . Append ( new List < object > { 5 , "str" } ) ) ;
1998
- Assert . Throws < FormatException > ( ( ) => df . Append ( new Dictionary < string , object > { { "Column2" , "str" } } ) ) ;
1999
- Assert . Throws < ArgumentException > ( ( ) => df . Append ( new List < object > { 5 , true , true } ) ) ;
2077
+ Assert . Throws < FormatException > ( ( ) => df . Append ( new List < object > { 5 , "str" } , inPlace : true ) ) ;
2078
+ Assert . Throws < FormatException > ( ( ) => df . Append ( new Dictionary < string , object > { { "Column2" , "str" } } , inPlace : true ) ) ;
2079
+ Assert . Throws < ArgumentException > ( ( ) => df . Append ( new List < object > { 5 , true , true } , inPlace : true ) ) ;
2080
+
2081
+ df . Append ( inPlace : true ) ;
2082
+ Assert . Equal ( 18 , df . Rows . Count ) ;
2083
+ Assert . Equal ( 18 , df [ "Column1" ] . Length ) ;
2084
+ Assert . Equal ( 18 , df [ "Column2" ] . Length ) ;
2085
+ Assert . Equal ( 5 , df . Columns [ 0 ] . NullCount ) ;
2086
+ Assert . Equal ( 6 , df . Columns [ 1 ] . NullCount ) ;
2000
2087
2001
- df . Append ( ) ;
2088
+ ret = df . Append ( inPlace : false ) ;
2002
2089
Assert . Equal ( 18 , df . Rows . Count ) ;
2003
2090
Assert . Equal ( 18 , df [ "Column1" ] . Length ) ;
2004
2091
Assert . Equal ( 18 , df [ "Column2" ] . Length ) ;
2005
2092
Assert . Equal ( 5 , df . Columns [ 0 ] . NullCount ) ;
2006
2093
Assert . Equal ( 6 , df . Columns [ 1 ] . NullCount ) ;
2094
+ Assert . Equal ( 19 , ret . Rows . Count ) ;
2095
+ Assert . Equal ( 19 , ret [ "Column1" ] . Length ) ;
2096
+ Assert . Equal ( 19 , ret [ "Column2" ] . Length ) ;
2097
+ Assert . Equal ( 6 , ret . Columns [ 0 ] . NullCount ) ;
2098
+ Assert . Equal ( 7 , ret . Columns [ 1 ] . NullCount ) ;
2007
2099
}
2008
2100
2009
2101
[ Fact ]
2010
2102
public void TestAppendEmptyValue ( )
2011
2103
{
2012
2104
DataFrame df = MakeDataFrame < int , bool > ( 10 ) ;
2013
- df . Append ( new List < object > { "" , true } ) ;
2105
+ df . Append ( new List < object > { "" , true } , inPlace : true ) ;
2014
2106
Assert . Equal ( 11 , df . Rows . Count ) ;
2015
2107
Assert . Equal ( 2 , df . Columns [ 0 ] . NullCount ) ;
2016
2108
Assert . Equal ( 1 , df . Columns [ 1 ] . NullCount ) ;
2017
2109
2018
2110
StringDataFrameColumn column = new StringDataFrameColumn ( "Strings" , Enumerable . Range ( 0 , 11 ) . Select ( x => x . ToString ( ) ) ) ;
2019
2111
df . Columns . Add ( column ) ;
2020
2112
2021
- df . Append ( new List < object > { 1 , true , "" } ) ;
2113
+ df . Append ( new List < object > { 1 , true , "" } , inPlace : true ) ;
2022
2114
Assert . Equal ( 12 , df . Rows . Count ) ;
2023
2115
Assert . Equal ( 2 , df . Columns [ 0 ] . NullCount ) ;
2024
2116
Assert . Equal ( 1 , df . Columns [ 1 ] . NullCount ) ;
2025
2117
Assert . Equal ( 0 , df . Columns [ 2 ] . NullCount ) ;
2026
2118
2027
- df . Append ( new List < object > { 1 , true , null } ) ;
2119
+ df . Append ( new List < object > { 1 , true , null } , inPlace : true ) ;
2028
2120
Assert . Equal ( 13 , df . Rows . Count ) ;
2029
2121
Assert . Equal ( 1 , df . Columns [ 2 ] . NullCount ) ;
2030
2122
}
0 commit comments