From 1921cf1eff16d6e23976270e3a5bedd80a6313f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogumi=C5=82=20Kami=C5=84ski?= Date: Tue, 22 Sep 2020 22:54:13 +0200 Subject: [PATCH 1/4] add only --- src/DataFrames.jl | 7 +++++++ src/abstractdataframe/abstractdataframe.jl | 10 ++++++++++ test/dataframe.jl | 7 ++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/DataFrames.jl b/src/DataFrames.jl index 35653e2129..656149efe2 100644 --- a/src/DataFrames.jl +++ b/src/DataFrames.jl @@ -80,6 +80,13 @@ if VERSION < v"1.2" export hasproperty end +if VERSION >= v"1.4" + import Base.only +else + import Compact.only + export only +end + include("other/utils.jl") include("other/index.jl") diff --git a/src/abstractdataframe/abstractdataframe.jl b/src/abstractdataframe/abstractdataframe.jl index ba7a68d76a..46aee96257 100644 --- a/src/abstractdataframe/abstractdataframe.jl +++ b/src/abstractdataframe/abstractdataframe.jl @@ -434,6 +434,16 @@ end ## ############################################################################## +""" + only(df::AbstractDataFrame) + +If `df` has a single row return it as a `DataFrameRow`; otherwise throw `ArgumentError`. +""" +function only(df::AbstractDataFrame) + nrow(df) != 1 && throw(ArgumentError("data frame must contain exactly 1 row")) + return df[1, :] +end + """ first(df::AbstractDataFrame) diff --git a/test/dataframe.jl b/test/dataframe.jl index 43bf72b450..dddc6ef28d 100644 --- a/test/dataframe.jl +++ b/test/dataframe.jl @@ -1051,7 +1051,7 @@ end @inferred ncol(df) end -@testset "description" begin +@testset "first, last and only" begin df = DataFrame(A = 1:10) @test first(df) == df[1, :] @@ -1063,6 +1063,11 @@ end @test first(df, 1) == DataFrame(A = 1) @test last(df, 6) == DataFrame(A = 5:10) @test last(df, 1) == DataFrame(A = 10) + + @test_throws ArgumentError only(df) + @test_throws ArgumentError only(DataFrame()) + df = DataFrame(a=1, b=2) + @test only(df) === df[1, :] end @testset "column conversions" begin From ee395fa4297d6562676afdafbb3b578d6a957274 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogumi=C5=82=20Kami=C5=84ski?= Date: Wed, 23 Sep 2020 08:08:23 +0200 Subject: [PATCH 2/4] Update src/DataFrames.jl Co-authored-by: Alex Arslan --- src/DataFrames.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DataFrames.jl b/src/DataFrames.jl index 656149efe2..9d115e0721 100644 --- a/src/DataFrames.jl +++ b/src/DataFrames.jl @@ -83,7 +83,7 @@ end if VERSION >= v"1.4" import Base.only else - import Compact.only + import Compat.only export only end From 9480dc1124e21dd40d3c0feeee72229c463fca1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogumi=C5=82=20Kami=C5=84ski?= Date: Wed, 23 Sep 2020 10:38:14 +0200 Subject: [PATCH 3/4] add only to docs --- docs/src/lib/functions.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/lib/functions.md b/docs/src/lib/functions.md index 62f57681c1..a3e154d2c1 100644 --- a/docs/src/lib/functions.md +++ b/docs/src/lib/functions.md @@ -99,6 +99,7 @@ filter filter! first last +only nonunique unique unique! From b73d0c34ef917bc0a63c5c24adefe39bf0a34c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogumi=C5=82=20Kami=C5=84ski?= Date: Wed, 23 Sep 2020 23:04:16 +0200 Subject: [PATCH 4/4] Update src/DataFrames.jl Co-authored-by: Alex Arslan --- src/DataFrames.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DataFrames.jl b/src/DataFrames.jl index 9d115e0721..6a8b7db008 100644 --- a/src/DataFrames.jl +++ b/src/DataFrames.jl @@ -80,7 +80,7 @@ if VERSION < v"1.2" export hasproperty end -if VERSION >= v"1.4" +if isdefined(Base, :only) # Introduced in 1.4.0 import Base.only else import Compat.only