Skip to content

Commit 39ef120

Browse files
authored
Use an empty DataFrame for DataFrame indexing things & import/export cleanup (#21)
1 parent 5fc7ec1 commit 39ef120

File tree

10 files changed

+49
-19
lines changed

10 files changed

+49
-19
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "DTables"
22
uuid = "20c56dc6-594c-4682-91cf-1d46875b1eba"
33
authors = ["Krystian Guliński", "Julian Samaroo", "and contributors"]
4-
version = "0.2.0"
4+
version = "0.2.1"
55

66
[deps]
77
Dagger = "d58978e5-989f-55fb-8d15-ea34adc7bf54"

src/DTables.jl

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@ module DTables
55
############################################################################################
66

77
using Dagger: Dagger
8-
using DataAPI: BroadcastedSelector
8+
using DataAPI: All, Between, Cols
99
using DataFrames:
10-
AbstractDataFrame,
10+
DataFrame,
1111
AsTable,
12-
ByRow,
1312
ColumnIndex,
1413
MultiColumnIndex,
1514
normalize_selection,
1615
Index,
1716
make_pair_concrete
18-
using InvertedIndices: BroadcastedInvertedIndex
17+
using InvertedIndices: Not
1918
using SentinelArrays: ChainedVector
2019
using TableOperations: TableOperations
2120
using Tables:
2221
columnindex,
2322
columnnames,
23+
ByRow,
2424
columns,
2525
columntable,
2626
getcolumn,
@@ -50,28 +50,44 @@ import Base:
5050
reduce,
5151
show,
5252
wait
53+
5354
import DataAPI: leftjoin, ncol, nrow, innerjoin
5455
import Tables:
5556
columnaccess, columnnames, columns, getcolumn, istable, partitions, rowaccess, rows, schema
56-
import DataFrames: broadcast_pair, select
57+
import DataFrames: broadcast_pair, select, index
5758

5859
############################################################################################
5960
# Export
6061
############################################################################################
6162

62-
export DTable, DTableColumn, innerjoin, leftjoin, select, tabletype, tabletype!, trim, trim!
63-
63+
export All,
64+
AsTable,
65+
Between,
66+
ByRow,
67+
Cols,
68+
DTable,
69+
DTableColumn,
70+
innerjoin,
71+
leftjoin,
72+
ncol,
73+
Not,
74+
nrow,
75+
select,
76+
tabletype,
77+
tabletype!,
78+
trim,
79+
trim!
6480
############################################################################################
6581

6682
include("table/dtable.jl")
6783
include("table/gdtable.jl")
6884
include("table/tables.jl")
69-
include("table/operations.jl")
70-
include("table/groupby.jl")
71-
include("table/join_interface.jl")
72-
include("table/join.jl")
7385
include("table/dtable_column.jl")
74-
include("table/dataframes_interface_utils.jl")
75-
include("table/dataframes_interface.jl")
86+
include("operations/operations.jl")
87+
include("operations/groupby.jl")
88+
include("operations/join_interface.jl")
89+
include("operations/join.jl")
90+
include("operations/dataframes_interface_utils.jl")
91+
include("operations/dataframes_interface.jl")
7692

7793
end

src/table/dataframes_interface.jl renamed to src/operations/dataframes_interface.jl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
struct DTableAbstractDataFrameWrapper <: AbstractDataFrame
2-
d::DTable
3-
end
4-
5-
broadcast_pair(df::DTable, p) = broadcast_pair(DTableAbstractDataFrameWrapper(df), p)
1+
broadcast_pair(dt::DTable, p) = broadcast_pair(empty_dataframe(dt), p)
62

73
# Not copied - full custom implementation
84
# There's a copymetadata here now
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/table/dtable.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ function merge_chunks(sink, chunks)
270270
end
271271

272272
names(dt::DTable) = string.(columnnames_svector(dt))
273+
names(dt::DTable, cols) = names(empty_dataframe(dt), cols)
273274
propertynames(dt::DTable) = columnnames_svector(dt)
274275

275276
function wait(dt::DTable)
@@ -294,3 +295,11 @@ end
294295
ncol(d::DTable) = length(columns(d))
295296
nrow(d::DTable) = length(d)
296297
index(df::DTable) = Index(columnnames_svector(df))
298+
299+
function empty_dataframe(dt::DTable)
300+
s = determine_schema(dt)
301+
return DataFrame(
302+
Pair{Symbol}[s.names[i] => s.types[i][] for i in eachindex(s.names, s.types)];
303+
copycols=false,
304+
)
305+
end

test/table_dataframes.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,13 @@ using SentinelArrays: ChainedVector
5252
@test fetch(select(dt, [] => ByRow(rand) => :x)).x isa ChainedVector{Float64, Vector{Float64}}
5353
@test fetch(select(dt, [] => (() -> rand(s)) => :x)).x isa ChainedVector{Float64, Vector{Float64}}
5454
end
55+
56+
@testset "names" begin
57+
v = DTable((a=[1], x1=[2], x2=[3], x3=[4], x4=[5]))
58+
@test names(v, All()) == names(v, :) == names(v) == ["a", "x1", "x2", "x3", "x4"]
59+
@test names(v, Between(:x1, :x3)) == ["x1", "x2", "x3"]
60+
@test names(v, Not(:a)) == names(v, r"x") == ["x1", "x2", "x3", "x4"]
61+
@test names(v, :x1) == names(v, 2) == ["x1"]
62+
@test names(v, Cols()) == names(v, Cols()) == []
63+
end
5564
end

0 commit comments

Comments
 (0)