Splitting a file into many files

You can "splat" multiple files into a tree by returning maketree("." => fs). This will place the files fs in the same directory as the file it replaces.

In map or mapsubtrees you can use maketree("." => fs) where fs is a vector to "splat" files into multiple files.

A convenience function will come in handy:

splatfiles(fs) = maketree("." => fs)
splatfiles (generic function with 1 method)
using FileTrees
using DataFrames, CSV

taxi_dir = FileTree("taxi-data")

dfs = FileTrees.load(taxi_dir) do file
    DataFrame(CSV.File(path(file)))
end
taxi-data/
├─ 2019/
│  ├─ 01/
│  │  ├─ green.csv (9×20 DataFrame)
│  │  └─ yellow.csv (9×18 DataFrame)
│  └─ 02/
│     ├─ green.csv (9×20 DataFrame)
│     └─ yellow.csv (9×18 DataFrame)
└─ 2020/
   ├─ 01/
   │  ├─ green.csv (9×20 DataFrame)
   │  └─ yellow.csv (9×18 DataFrame)
   └─ 02/
      ├─ green.csv (9×20 DataFrame)
      └─ yellow.csv (9×18 DataFrame)

Split up each yellow file into multiple files:

yellowdfs = dfs[r"yellow.csv$"]

expanded_tree = mapsubtrees(yellowdfs, glob"*/*/yellow.csv") do df
    map(groupby(get(df), :RatecodeID) |> collect) do group
        (name=string("yellow-ratecode-", group.RatecodeID[1], ".df"), value=DataFrame(group))
    end |> splatfiles
end
taxi-data/
├─ 2019/
│  ├─ 01/
│  │  ├─ yellow-ratecode-1.df (7×18 DataFrame)
│  │  └─ yellow-ratecode-2.df (2×18 DataFrame)
│  └─ 02/
│     └─ yellow-ratecode-1.df (9×18 DataFrame)
└─ 2020/
   ├─ 01/
   │  ├─ yellow-ratecode-1.df (8×18 DataFrame)
   │  └─ yellow-ratecode-5.df (1×18 DataFrame)
   └─ 02/
      └─ yellow-ratecode-1.df (9×18 DataFrame)

You can save these files if you wish.

How to create lazy subtrees?

If the value field of a file passed to splatfiles is a Thunk, then it becomes a lazy value.

A thunk can be created with the syntax lazy(f)(x...). where the result is a Thunk which represents the result of executing f(x...).

yellowdfs = dfs[r"yellow.csv$"]

expanded_tree = mapsubtrees(yellowdfs, glob"*/*/yellow.csv") do df
    map(groupby(get(df), :payment_type) |> collect) do group
        id = group.payment_type[1]
        (name=string("yellow-ptype-", group.payment_type[1], ".df"), value=lazy(repr)(group))
    end |> splatfiles
end
taxi-data/
├─ 2019/
│  ├─ 01/
│  │  ├─ yellow-ptype-1.df (Thunk(repr, (5×18 SubDataFrame
│  │  │  │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra   │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│  │  │  │     │ Int64    │ String               │ String                │ Int64           │ Float64       │ Int64      │ String             │ Int64        │ Int64        │ Int64        │ Float64     │ Float64 │ Float64 │ Float64    │ Float64      │ Float64               │ Float64      │ Missing              │
│  │  │  ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│  │  │  │ 1   │ 1        │ 2019-01-01 00:46:40  │ 2019-01-01 00:53:20   │ 1               │ 1.5           │ 1          │ N                  │ 151          │ 239          │ 1            │ 7.0         │ 0.5     │ 0.5     │ 1.65       │ 0.0          │ 0.3                   │ 9.95         │ missing              │
│  │  │  │ 2   │ 1        │ 2019-01-01 00:59:47  │ 2019-01-01 01:18:59   │ 1               │ 2.6           │ 1          │ N                  │ 239          │ 246          │ 1            │ 14.0        │ 0.5     │ 0.5     │ 1.0        │ 0.0          │ 0.3                   │ 16.3         │ missing              │
│  │  │  │ 3   │ 2        │ 2018-12-21 13:48:30  │ 2018-12-21 13:52:40   │ 3               │ 0.0           │ 1          │ N                  │ 236          │ 236          │ 1            │ 4.5         │ 0.5     │ 0.5     │ 0.0        │ 0.0          │ 0.3                   │ 5.8          │ missing              │
│  │  │  │ 4   │ 1        │ 2019-01-01 00:21:28  │ 2019-01-01 00:28:37   │ 1               │ 1.3           │ 1          │ N                  │ 163          │ 229          │ 1            │ 6.5         │ 0.5     │ 0.5     │ 1.25       │ 0.0          │ 0.3                   │ 9.05         │ missing              │
│  │  │  │ 5   │ 1        │ 2019-01-01 00:32:01  │ 2019-01-01 00:45:39   │ 1               │ 3.7           │ 1          │ N                  │ 229          │ 7            │ 1            │ 13.5        │ 0.5     │ 0.5     │ 3.7        │ 0.0          │ 0.3                   │ 18.5         │ missing              │,)))
│  │  └─ yellow-ptype-2.df (Thunk(repr, (4×18 SubDataFrame
│  │     │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra   │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│  │     │     │ Int64    │ String               │ String                │ Int64           │ Float64       │ Int64      │ String             │ Int64        │ Int64        │ Int64        │ Float64     │ Float64 │ Float64 │ Float64    │ Float64      │ Float64               │ Float64      │ Missing              │
│  │     ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│  │     │ 1   │ 2        │ 2018-11-28 15:52:25  │ 2018-11-28 15:55:45   │ 5               │ 0.0           │ 1          │ N                  │ 193          │ 193          │ 2            │ 3.5         │ 0.5     │ 0.5     │ 0.0        │ 0.0          │ 0.3                   │ 7.55         │ missing              │
│  │     │ 2   │ 2        │ 2018-11-28 15:56:57  │ 2018-11-28 15:58:33   │ 5               │ 0.0           │ 2          │ N                  │ 193          │ 193          │ 2            │ 52.0        │ 0.0     │ 0.5     │ 0.0        │ 0.0          │ 0.3                   │ 55.55        │ missing              │
│  │     │ 3   │ 2        │ 2018-11-28 16:25:49  │ 2018-11-28 16:28:26   │ 5               │ 0.0           │ 1          │ N                  │ 193          │ 193          │ 2            │ 3.5         │ 0.5     │ 0.5     │ 0.0        │ 5.76         │ 0.3                   │ 13.31        │ missing              │
│  │     │ 4   │ 2        │ 2018-11-28 16:29:37  │ 2018-11-28 16:33:43   │ 5               │ 0.0           │ 2          │ N                  │ 193          │ 193          │ 2            │ 52.0        │ 0.0     │ 0.5     │ 0.0        │ 0.0          │ 0.3                   │ 55.55        │ missing              │,)))
│  └─ 02/
│     ├─ yellow-ptype-1.df (Thunk(repr, (1×18 SubDataFrame
│     │  │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra   │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│     │  │     │ Int64    │ String               │ String                │ Int64           │ Float64       │ Int64      │ String             │ Int64        │ Int64        │ Int64        │ Float64     │ Float64 │ Float64 │ Int64      │ Int64        │ Float64               │ Float64      │ Int64                │
│     │  ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│     │  │ 1   │ 1        │ 2019-02-01 00:59:04  │ 2019-02-01 01:07:27   │ 1               │ 2.1           │ 1          │ N                  │ 48           │ 234          │ 1            │ 9.0         │ 0.5     │ 0.5     │ 2          │ 0            │ 0.3                   │ 12.3         │ 0                    │,)))
│     └─ yellow-ptype-2.df (Thunk(repr, (8×18 SubDataFrame
│        │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra   │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│        │     │ Int64    │ String               │ String                │ Int64           │ Float64       │ Int64      │ String             │ Int64        │ Int64        │ Int64        │ Float64     │ Float64 │ Float64 │ Int64      │ Int64        │ Float64               │ Float64      │ Int64                │
│        ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│        │ 1   │ 1        │ 2019-02-01 00:33:09  │ 2019-02-01 01:03:58   │ 1               │ 9.8           │ 1          │ N                  │ 230          │ 93           │ 2            │ 32.0        │ 0.5     │ 0.5     │ 0          │ 0            │ 0.3                   │ 33.3         │ 0                    │
│        │ 2   │ 1        │ 2019-02-01 00:09:03  │ 2019-02-01 00:09:16   │ 1               │ 0.0           │ 1          │ N                  │ 145          │ 145          │ 2            │ 2.5         │ 0.5     │ 0.5     │ 0          │ 0            │ 0.3                   │ 3.8          │ 0                    │
│        │ 3   │ 1        │ 2019-02-01 00:45:38  │ 2019-02-01 00:51:10   │ 1               │ 0.8           │ 1          │ N                  │ 95           │ 95           │ 2            │ 5.5         │ 0.5     │ 0.5     │ 0          │ 0            │ 0.3                   │ 6.8          │ 0                    │
│        │ 4   │ 1        │ 2019-02-01 00:25:30  │ 2019-02-01 00:28:14   │ 1               │ 0.8           │ 1          │ N                  │ 140          │ 263          │ 2            │ 5.0         │ 0.5     │ 0.5     │ 0          │ 0            │ 0.3                   │ 6.3          │ 0                    │
│        │ 5   │ 1        │ 2019-02-01 00:38:02  │ 2019-02-01 00:40:57   │ 1               │ 0.8           │ 1          │ N                  │ 229          │ 141          │ 2            │ 4.5         │ 0.5     │ 0.5     │ 0          │ 0            │ 0.3                   │ 5.8          │ 0                    │
│        │ 6   │ 1        │ 2019-02-01 00:06:49  │ 2019-02-01 00:10:34   │ 1               │ 0.9           │ 1          │ N                  │ 75           │ 41           │ 2            │ 5.0         │ 0.5     │ 0.5     │ 0          │ 0            │ 0.3                   │ 6.3          │ 0                    │
│        │ 7   │ 1        │ 2019-02-01 00:04:04  │ 2019-02-01 00:24:27   │ 1               │ 2.8           │ 1          │ N                  │ 246          │ 229          │ 2            │ 14.0        │ 0.5     │ 0.5     │ 0          │ 0            │ 0.3                   │ 15.3         │ 0                    │
│        │ 8   │ 1        │ 2019-02-01 00:28:20  │ 2019-02-01 00:40:31   │ 1               │ 2.1           │ 1          │ N                  │ 79           │ 232          │ 2            │ 10.5        │ 0.5     │ 0.5     │ 0          │ 0            │ 0.3                   │ 11.8         │ 0                    │,)))
└─ 2020/
   ├─ 01/
   │  ├─ yellow-ptype-1.df (Thunk(repr, (7×18 SubDataFrame
   │  │  │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra   │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
   │  │  │     │ Int64    │ String               │ String                │ Int64           │ Float64       │ Int64      │ String             │ Int64        │ Int64        │ Int64        │ Float64     │ Float64 │ Float64 │ Float64    │ Int64        │ Float64               │ Float64      │ Float64              │
   │  │  ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
   │  │  │ 1   │ 1        │ 2020-01-01 00:28:15  │ 2020-01-01 00:33:03   │ 1               │ 1.2           │ 1          │ N                  │ 238          │ 239          │ 1            │ 6.0         │ 3.0     │ 0.5     │ 1.47       │ 0            │ 0.3                   │ 11.27        │ 2.5                  │
   │  │  │ 2   │ 1        │ 2020-01-01 00:35:39  │ 2020-01-01 00:43:04   │ 1               │ 1.2           │ 1          │ N                  │ 239          │ 238          │ 1            │ 7.0         │ 3.0     │ 0.5     │ 1.5        │ 0            │ 0.3                   │ 12.3         │ 2.5                  │
   │  │  │ 3   │ 1        │ 2020-01-01 00:47:41  │ 2020-01-01 00:53:52   │ 1               │ 0.6           │ 1          │ N                  │ 238          │ 238          │ 1            │ 6.0         │ 3.0     │ 0.5     │ 1.0        │ 0            │ 0.3                   │ 10.8         │ 2.5                  │
   │  │  │ 4   │ 1        │ 2020-01-01 00:55:23  │ 2020-01-01 01:00:14   │ 1               │ 0.8           │ 1          │ N                  │ 238          │ 151          │ 1            │ 5.5         │ 0.5     │ 0.5     │ 1.36       │ 0            │ 0.3                   │ 8.16         │ 0.0                  │
   │  │  │ 5   │ 2        │ 2020-01-01 00:39:25  │ 2020-01-01 00:39:29   │ 1               │ 0.0           │ 1          │ N                  │ 193          │ 193          │ 1            │ 2.5         │ 0.5     │ 0.5     │ 0.01       │ 0            │ 0.3                   │ 3.81         │ 0.0                  │
   │  │  │ 6   │ 2        │ 2019-12-18 15:27:49  │ 2019-12-18 15:28:59   │ 1               │ 0.0           │ 5          │ N                  │ 193          │ 193          │ 1            │ 0.01        │ 0.0     │ 0.0     │ 0.0        │ 0            │ 0.3                   │ 2.81         │ 2.5                  │
   │  │  │ 7   │ 2        │ 2019-12-18 15:30:35  │ 2019-12-18 15:31:35   │ 4               │ 0.0           │ 1          │ N                  │ 193          │ 193          │ 1            │ 2.5         │ 0.5     │ 0.5     │ 0.0        │ 0            │ 0.3                   │ 6.3          │ 2.5                  │,)))
   │  └─ yellow-ptype-2.df (Thunk(repr, (2×18 SubDataFrame
   │     │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra   │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
   │     │     │ Int64    │ String               │ String                │ Int64           │ Float64       │ Int64      │ String             │ Int64        │ Int64        │ Int64        │ Float64     │ Float64 │ Float64 │ Float64    │ Int64        │ Float64               │ Float64      │ Float64              │
   │     ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
   │     │ 1   │ 2        │ 2020-01-01 00:01:58  │ 2020-01-01 00:04:16   │ 1               │ 0.0           │ 1          │ N                  │ 193          │ 193          │ 2            │ 3.5         │ 0.5     │ 0.5     │ 0.0        │ 0            │ 0.3                   │ 4.8          │ 0.0                  │
   │     │ 2   │ 2        │ 2020-01-01 00:09:44  │ 2020-01-01 00:10:37   │ 1               │ 0.03          │ 1          │ N                  │ 7            │ 193          │ 2            │ 2.5         │ 0.5     │ 0.5     │ 0.0        │ 0            │ 0.3                   │ 3.8          │ 0.0                  │,)))
   └─ 02/
      ├─ yellow-ptype-1.df (Thunk(repr, (7×18 SubDataFrame
      │  │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra   │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
      │  │     │ Int64    │ String               │ String                │ Int64           │ Float64       │ Int64      │ String             │ Int64        │ Int64        │ Int64        │ Float64     │ Float64 │ Float64 │ Float64    │ Int64        │ Float64               │ Float64      │ Float64              │
      │  ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
      │  │ 1   │ 1        │ 2020-02-01 00:17:35  │ 2020-02-01 00:30:32   │ 1               │ 2.6           │ 1          │ N                  │ 145          │ 7            │ 1            │ 11.0        │ 0.5     │ 0.5     │ 2.45       │ 0            │ 0.3                   │ 14.75        │ 0.0                  │
      │  │ 2   │ 1        │ 2020-02-01 00:32:47  │ 2020-02-01 01:05:36   │ 1               │ 4.8           │ 1          │ N                  │ 45           │ 61           │ 1            │ 21.5        │ 3.0     │ 0.5     │ 6.3        │ 0            │ 0.3                   │ 31.6         │ 2.5                  │
      │  │ 3   │ 1        │ 2020-02-01 00:31:44  │ 2020-02-01 00:43:28   │ 1               │ 3.2           │ 1          │ N                  │ 186          │ 140          │ 1            │ 11.0        │ 3.0     │ 0.5     │ 1.0        │ 0            │ 0.3                   │ 15.8         │ 2.5                  │
      │  │ 4   │ 2        │ 2020-02-01 00:07:35  │ 2020-02-01 00:31:39   │ 1               │ 4.38          │ 1          │ N                  │ 144          │ 140          │ 1            │ 18.0        │ 0.5     │ 0.5     │ 3.0        │ 0            │ 0.3                   │ 24.8         │ 2.5                  │
      │  │ 5   │ 1        │ 2020-02-01 00:15:49  │ 2020-02-01 00:20:48   │ 2               │ 1.0           │ 1          │ N                  │ 249          │ 107          │ 1            │ 5.5         │ 3.0     │ 0.5     │ 1.85       │ 0            │ 0.3                   │ 11.15        │ 2.5                  │
      │  │ 6   │ 1        │ 2020-02-01 00:25:31  │ 2020-02-01 00:50:22   │ 2               │ 3.4           │ 1          │ N                  │ 79           │ 256          │ 1            │ 18.5        │ 3.0     │ 0.5     │ 4.45       │ 0            │ 0.3                   │ 26.75        │ 2.5                  │
      │  │ 7   │ 2        │ 2020-02-01 00:58:26  │ 2020-02-01 01:02:26   │ 1               │ 0.8           │ 1          │ N                  │ 116          │ 42           │ 1            │ 5.0         │ 0.5     │ 0.5     │ 1.26       │ 0            │ 0.3                   │ 7.56         │ 0.0                  │,)))
      └─ yellow-ptype-2.df (Thunk(repr, (2×18 SubDataFrame
         │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra   │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
         │     │ Int64    │ String               │ String                │ Int64           │ Float64       │ Int64      │ String             │ Int64        │ Int64        │ Int64        │ Float64     │ Float64 │ Float64 │ Float64    │ Int64        │ Float64               │ Float64      │ Float64              │
         ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
         │ 1   │ 2        │ 2020-02-01 00:51:43  │ 2020-02-01 01:01:29   │ 1               │ 2.28          │ 1          │ N                  │ 238          │ 152          │ 2            │ 9.5         │ 0.5     │ 0.5     │ 0.0        │ 0            │ 0.3                   │ 10.8         │ 0.0                  │
         │ 2   │ 1        │ 2020-02-01 00:11:15  │ 2020-02-01 00:24:29   │ 1               │ 2.1           │ 1          │ N                  │ 224          │ 68           │ 2            │ 10.5        │ 3.0     │ 0.5     │ 0.0        │ 0            │ 0.3                   │ 14.3         │ 2.5                  │,)))
exec(expanded_tree)
taxi-data/
├─ 2019/
│  ├─ 01/
│  │  ├─ yellow-ptype-1.df (String)
│  │  └─ yellow-ptype-2.df (String)
│  └─ 02/
│     ├─ yellow-ptype-1.df (String)
│     └─ yellow-ptype-2.df (String)
└─ 2020/
   ├─ 01/
   │  ├─ yellow-ptype-1.df (String)
   │  └─ yellow-ptype-2.df (String)
   └─ 02/
      ├─ yellow-ptype-1.df (String)
      └─ yellow-ptype-2.df (String)
exec(expanded_tree) |> files |> first |> get |> print
5×18 SubDataFrame
│ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra   │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│     │ Int64    │ String               │ String                │ Int64           │ Float64       │ Int64      │ String             │ Int64        │ Int64        │ Int64        │ Float64     │ Float64 │ Float64 │ Float64    │ Float64      │ Float64               │ Float64      │ Missing              │
├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│ 1   │ 1        │ 2019-01-01 00:46:40  │ 2019-01-01 00:53:20   │ 1               │ 1.5           │ 1          │ N                  │ 151          │ 239          │ 1            │ 7.0         │ 0.5     │ 0.5     │ 1.65       │ 0.0          │ 0.3                   │ 9.95         │ missing              │
│ 2   │ 1        │ 2019-01-01 00:59:47  │ 2019-01-01 01:18:59   │ 1               │ 2.6           │ 1          │ N                  │ 239          │ 246          │ 1            │ 14.0        │ 0.5     │ 0.5     │ 1.0        │ 0.0          │ 0.3                   │ 16.3         │ missing              │
│ 3   │ 2        │ 2018-12-21 13:48:30  │ 2018-12-21 13:52:40   │ 3               │ 0.0           │ 1          │ N                  │ 236          │ 236          │ 1            │ 4.5         │ 0.5     │ 0.5     │ 0.0        │ 0.0          │ 0.3                   │ 5.8          │ missing              │
│ 4   │ 1        │ 2019-01-01 00:21:28  │ 2019-01-01 00:28:37   │ 1               │ 1.3           │ 1          │ N                  │ 163          │ 229          │ 1            │ 6.5         │ 0.5     │ 0.5     │ 1.25       │ 0.0          │ 0.3                   │ 9.05         │ missing              │
│ 5   │ 1        │ 2019-01-01 00:32:01  │ 2019-01-01 00:45:39   │ 1               │ 3.7           │ 1          │ N                  │ 229          │ 7            │ 1            │ 13.5        │ 0.5     │ 0.5     │ 3.7        │ 0.0          │ 0.3                   │ 18.5         │ missing              │