Home Home Yuxuan Xie
  • Tools
    • hydroET
    • ggRunoff
    • terraExtra
  • Publications
  • Github home
  • Source Code

On this page

  • 1 导入库
  • 2 读取数据
  • 3 取出某一行
    • 3.1 方法1
    • 3.2 方法2
  • 4 列名
  • 5 创建一个0行但包含全部列名的df
  • 6 查看df基本信息
  • 7 筛选df
  • 8 条件筛选
  • 9 常规
    • 9.1 正则表达式
  • 10 转换函数
  • 11 尝试管道符
  • Edit this page
  • Report an issue

Learn DataFrames.jl

学习Julia

Julia
Published

June 19, 2023

1 导入库

using CSV
using DataFrames

2 读取数据

df = CSV.read("../data/203st_idw_interp_0.05deg.csv", DataFrame)
# df = CSV.read("I:/order_data/Xujw/203st_idw_interp_0.05deg.csv", DataFrame)
df # copy(df) 复制df
203×7 DataFrame
178 rows omitted
Row site lon lat Eh V Ni Ba
String15 Float64 Float64 Float64 Float64 Float64 Float64
1 19G26 111.8 29.07 33.2 0.08 1.55 126.99
2 22G-80 111.93 28.94 163.6 0.45 2.77 71.83
3 19G22 111.95 28.98 -48.0 0.17 1.18 161.81
4 22G-83 111.98 29.11 64.8 0.25 0.59 136.21
5 22G-81 112.03 29.04 143.1 0.97 1.83 124.54
6 20DT-19G 112.07 29.09 26.0 0.853692 1.28 173.21
7 19G21 112.14 28.87 143.0 0.06 1.16 5.54
8 20DT-17G 112.14 29.0 -60.8 0.590868 0.7 258.56
9 22G-82 112.2 29.08 96.1 0.36 1.04 183.63
10 22G-90 112.2 29.66 -88.1 0.06 1.8 167.24
11 22G-88 112.24 29.27 115.5 0.51 2.29 20.98
12 22G-85 112.26 29.18 90.5 0.310593 4.08 476.34
13 DT02G 112.26 29.59 -29.3 0.53 2.16 234.38
⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮
192 11JH031 113.65 30.17 -54.3 0.11 0.69 279.53
193 11JH161 113.69 30.09 -54.3 0.08 0.63 213.16
194 22G-67 113.7 30.15 -54.3 0.47 5.19 136.8
195 11JH057 113.7 30.39 -81.3826 0.15 0.97 457.99
196 11JH182 113.72 30.05 -54.3 0.11 0.42 119.42
197 22G-66 113.75 30.29 -97.3 0.82 4.77 332.1
198 11JH183 113.77 30.07 -54.8787 0.07 0.44 155.31
199 11JH185 113.8 30.1 -54.7215 0.36 0.81 101.32
200 11JH180 113.84 30.06 -61.5239 0.12 0.57 258.18
201 22G-68 113.87 30.14 -55.6 0.2 4.7 163.95
202 18G-40 113.95 30.17 -149.0 0.3 2.15 514.11
203 22G-69 114.0 30.13 -99.0 0.288669 1.38 0.08

3 取出某一行

3.1 方法1

df.V # df."V"
203-element Vector{Float64}:
 0.08
 0.45
 0.17
 0.25
 0.97
 0.85369167324573
 0.06
 0.590868123957716
 0.36
 0.06
 0.51
 0.310592788968676
 0.53
 ⋮
 0.11
 0.08
 0.47
 0.15
 0.11
 0.82
 0.07
 0.36
 0.12
 0.2
 0.3
 0.288668959788242

3.2 方法2

df[:, :V] # 这种情况下取值更改不会改变之前的数据框内容
203-element Vector{Float64}:
 0.08
 0.45
 0.17
 0.25
 0.97
 0.85369167324573
 0.06
 0.590868123957716
 0.36
 0.06
 0.51
 0.310592788968676
 0.53
 ⋮
 0.11
 0.08
 0.47
 0.15
 0.11
 0.82
 0.07
 0.36
 0.12
 0.2
 0.3
 0.288668959788242

4 列名

names(df, AbstractString) # 筛选出不同数据类型的列名
names(df, Float64)
6-element Vector{String}:
 "lon"
 "lat"
 "Eh"
 "V"
 "Ni"
 "Ba"

5 创建一个0行但包含全部列名的df

empty(df) # empty!()直接让目标df清空
0×7 DataFrame
Row site lon lat Eh V Ni Ba
String15 Float64 Float64 Float64 Float64 Float64 Float64

6 查看df基本信息

df维度:

size(df) # 维度
nrow(df) # ncol()
203

统计信息,类似R语言summary

describe(df, cols=4:7)
4×7 DataFrame
Row variable mean min median max nmissing eltype
Symbol Float64 Float64 Float64 Float64 Int64 DataType
1 Eh -54.8574 -278.3 -72.2 177.2 0 Float64
2 V 0.344441 0.0 0.259441 1.88 0 Float64
3 Ni 2.46611 0.0 2.14 8.39 0 Float64
4 Ba 253.259 0.01 195.07 1752.0 0 Float64

7 筛选df

df[:, [:lon, :lat]]
203×2 DataFrame
178 rows omitted
Row lon lat
Float64 Float64
1 111.8 29.07
2 111.93 28.94
3 111.95 28.98
4 111.98 29.11
5 112.03 29.04
6 112.07 29.09
7 112.14 28.87
8 112.14 29.0
9 112.2 29.08
10 112.2 29.66
11 112.24 29.27
12 112.26 29.18
13 112.26 29.59
⋮ ⋮ ⋮
192 113.65 30.17
193 113.69 30.09
194 113.7 30.15
195 113.7 30.39
196 113.72 30.05
197 113.75 30.29
198 113.77 30.07
199 113.8 30.1
200 113.84 30.06
201 113.87 30.14
202 113.95 30.17
203 114.0 30.13

8 条件筛选

9 常规

df[:, Not([:site, :lon, :lat])]
203×4 DataFrame
178 rows omitted
Row Eh V Ni Ba
Float64 Float64 Float64 Float64
1 33.2 0.08 1.55 126.99
2 163.6 0.45 2.77 71.83
3 -48.0 0.17 1.18 161.81
4 64.8 0.25 0.59 136.21
5 143.1 0.97 1.83 124.54
6 26.0 0.853692 1.28 173.21
7 143.0 0.06 1.16 5.54
8 -60.8 0.590868 0.7 258.56
9 96.1 0.36 1.04 183.63
10 -88.1 0.06 1.8 167.24
11 115.5 0.51 2.29 20.98
12 90.5 0.310593 4.08 476.34
13 -29.3 0.53 2.16 234.38
⋮ ⋮ ⋮ ⋮ ⋮
192 -54.3 0.11 0.69 279.53
193 -54.3 0.08 0.63 213.16
194 -54.3 0.47 5.19 136.8
195 -81.3826 0.15 0.97 457.99
196 -54.3 0.11 0.42 119.42
197 -97.3 0.82 4.77 332.1
198 -54.8787 0.07 0.44 155.31
199 -54.7215 0.36 0.81 101.32
200 -61.5239 0.12 0.57 258.18
201 -55.6 0.2 4.7 163.95
202 -149.0 0.3 2.15 514.11
203 -99.0 0.288669 1.38 0.08
df[:, Between(:site, :lat)]
203×3 DataFrame
178 rows omitted
Row site lon lat
String15 Float64 Float64
1 19G26 111.8 29.07
2 22G-80 111.93 28.94
3 19G22 111.95 28.98
4 22G-83 111.98 29.11
5 22G-81 112.03 29.04
6 20DT-19G 112.07 29.09
7 19G21 112.14 28.87
8 20DT-17G 112.14 29.0
9 22G-82 112.2 29.08
10 22G-90 112.2 29.66
11 22G-88 112.24 29.27
12 22G-85 112.26 29.18
13 DT02G 112.26 29.59
⋮ ⋮ ⋮ ⋮
192 11JH031 113.65 30.17
193 11JH161 113.69 30.09
194 22G-67 113.7 30.15
195 11JH057 113.7 30.39
196 11JH182 113.72 30.05
197 22G-66 113.75 30.29
198 11JH183 113.77 30.07
199 11JH185 113.8 30.1
200 11JH180 113.84 30.06
201 22G-68 113.87 30.14
202 18G-40 113.95 30.17
203 22G-69 114.0 30.13

9.1 正则表达式

df[:, r"l"]
203×2 DataFrame
178 rows omitted
Row lon lat
Float64 Float64
1 111.8 29.07
2 111.93 28.94
3 111.95 28.98
4 111.98 29.11
5 112.03 29.04
6 112.07 29.09
7 112.14 28.87
8 112.14 29.0
9 112.2 29.08
10 112.2 29.66
11 112.24 29.27
12 112.26 29.18
13 112.26 29.59
⋮ ⋮ ⋮
192 113.65 30.17
193 113.69 30.09
194 113.7 30.15
195 113.7 30.39
196 113.72 30.05
197 113.75 30.29
198 113.77 30.07
199 113.8 30.1
200 113.84 30.06
201 113.87 30.14
202 113.95 30.17
203 114.0 30.13

10 转换函数

共五种方法:

  • combine

  • select

  • transformselect

导入分组统计所需包

using Statistics

求V的平均值

combine(df, :V => mean => :mean_V)
1×1 DataFrame
Row mean_V
Float64
1 0.344441

筛选lon

select(df, :lon => mean => :mean_lon)
203×1 DataFrame
178 rows omitted
Row mean_lon
Float64
1 112.868
2 112.868
3 112.868
4 112.868
5 112.868
6 112.868
7 112.868
8 112.868
9 112.868
10 112.868
11 112.868
12 112.868
13 112.868
⋮ ⋮
192 112.868
193 112.868
194 112.868
195 112.868
196 112.868
197 112.868
198 112.868
199 112.868
200 112.868
201 112.868
202 112.868
203 112.868

随便选

select(df, r"l", "site", :V)
203×4 DataFrame
178 rows omitted
Row lon lat site V
Float64 Float64 String15 Float64
1 111.8 29.07 19G26 0.08
2 111.93 28.94 22G-80 0.45
3 111.95 28.98 19G22 0.17
4 111.98 29.11 22G-83 0.25
5 112.03 29.04 22G-81 0.97
6 112.07 29.09 20DT-19G 0.853692
7 112.14 28.87 19G21 0.06
8 112.14 29.0 20DT-17G 0.590868
9 112.2 29.08 22G-82 0.36
10 112.2 29.66 22G-90 0.06
11 112.24 29.27 22G-88 0.51
12 112.26 29.18 22G-85 0.310593
13 112.26 29.59 DT02G 0.53
⋮ ⋮ ⋮ ⋮ ⋮
192 113.65 30.17 11JH031 0.11
193 113.69 30.09 11JH161 0.08
194 113.7 30.15 22G-67 0.47
195 113.7 30.39 11JH057 0.15
196 113.72 30.05 11JH182 0.11
197 113.75 30.29 22G-66 0.82
198 113.77 30.07 11JH183 0.07
199 113.8 30.1 11JH185 0.36
200 113.84 30.06 11JH180 0.12
201 113.87 30.14 22G-68 0.2
202 113.95 30.17 18G-40 0.3
203 114.0 30.13 22G-69 0.288669

改列名

select(df, :lon => :new_lon, :)
203×8 DataFrame
178 rows omitted
Row new_lon site lon lat Eh V Ni Ba
Float64 String15 Float64 Float64 Float64 Float64 Float64 Float64
1 111.8 19G26 111.8 29.07 33.2 0.08 1.55 126.99
2 111.93 22G-80 111.93 28.94 163.6 0.45 2.77 71.83
3 111.95 19G22 111.95 28.98 -48.0 0.17 1.18 161.81
4 111.98 22G-83 111.98 29.11 64.8 0.25 0.59 136.21
5 112.03 22G-81 112.03 29.04 143.1 0.97 1.83 124.54
6 112.07 20DT-19G 112.07 29.09 26.0 0.853692 1.28 173.21
7 112.14 19G21 112.14 28.87 143.0 0.06 1.16 5.54
8 112.14 20DT-17G 112.14 29.0 -60.8 0.590868 0.7 258.56
9 112.2 22G-82 112.2 29.08 96.1 0.36 1.04 183.63
10 112.2 22G-90 112.2 29.66 -88.1 0.06 1.8 167.24
11 112.24 22G-88 112.24 29.27 115.5 0.51 2.29 20.98
12 112.26 22G-85 112.26 29.18 90.5 0.310593 4.08 476.34
13 112.26 DT02G 112.26 29.59 -29.3 0.53 2.16 234.38
⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮
192 113.65 11JH031 113.65 30.17 -54.3 0.11 0.69 279.53
193 113.69 11JH161 113.69 30.09 -54.3 0.08 0.63 213.16
194 113.7 22G-67 113.7 30.15 -54.3 0.47 5.19 136.8
195 113.7 11JH057 113.7 30.39 -81.3826 0.15 0.97 457.99
196 113.72 11JH182 113.72 30.05 -54.3 0.11 0.42 119.42
197 113.75 22G-66 113.75 30.29 -97.3 0.82 4.77 332.1
198 113.77 11JH183 113.77 30.07 -54.8787 0.07 0.44 155.31
199 113.8 11JH185 113.8 30.1 -54.7215 0.36 0.81 101.32
200 113.84 11JH180 113.84 30.06 -61.5239 0.12 0.57 258.18
201 113.87 22G-68 113.87 30.14 -55.6 0.2 4.7 163.95
202 113.95 18G-40 113.95 30.17 -149.0 0.3 2.15 514.11
203 114.0 22G-69 114.0 30.13 -99.0 0.288669 1.38 0.08

11 尝试管道符

参考学习链接:Comparing dplyr vs DataFrames.jl

using Pipe
@time @pipe df |>
  combine(_, :V => (x -> x) => :V_mean, :) |>
  (df -> begin
    df.new_col = df.V
    df
  end) |>
  filter(:V_mean => v -> v >0, _) |>
  sort(_, :new_col)
  0.172564 seconds (818.78 k allocations: 40.826 MiB, 5.39% gc time, 99.71% compilation time: 1% of which was recompilation)
193×9 DataFrame
168 rows omitted
Row V_mean site lon lat Eh V Ni Ba new_col
Float64 String15 Float64 Float64 Float64 Float64 Float64 Float64 Float64
1 0.01 12JH093 112.85 29.94 -218.5 0.01 2.09 184.509 0.01
2 0.02 18S-25G 112.3 29.77 -88.1 0.02 0.22 112.0 0.02
3 0.04 12JH076 112.58 30.29 -90.0 0.04 2.47 170.86 0.04
4 0.04 18G-05 113.51 29.84 87.5 0.04 0.31 59.45 0.04
5 0.05 22G-86 112.43 29.39 -7.6 0.05 1.47 160.13 0.05
6 0.05 22G-73 112.81 29.42 -78.5 0.05 3.49 120.7 0.05
7 0.05 18G-11 113.26 29.61 -83.2 0.05 0.06 275.26 0.05
8 0.0558746 22G-70 113.56 29.88 -50.4 0.0558746 8.39 58.55 0.0558746
9 0.06 19G21 112.14 28.87 143.0 0.06 1.16 5.54 0.06
10 0.06 22G-90 112.2 29.66 -88.1 0.06 1.8 167.24 0.06
11 0.06 19G14 112.69 29.15 -81.0 0.06 0.99 120.31 0.06
12 0.07 18G-19 112.63 29.78 -14.3 0.07 0.45 510.65 0.07
13 0.07 18G-25 112.64 29.95 -72.0 0.07 1.31 58.46 0.07
⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮
182 0.92 22G-31 112.81 30.18 -75.2 0.92 4.45 237.92 0.92
183 0.92 22G-34 112.92 30.42 -75.9 0.92 4.13 235.87 0.92
184 0.97 22G-81 112.03 29.04 143.1 0.97 1.83 124.54 0.97
185 0.97 22G-03 112.5 29.95 -88.0 0.97 4.46 117.86 0.97
186 1.09 12JH078 112.6 30.25 -16.5 1.09 2.63 170.86 1.09
187 1.09 22G-18 112.95 29.64 -21.4 1.09 5.42 175.97 1.09
188 1.2 22G-13 112.96 29.75 -77.5 1.2 5.28 205.88 1.2
189 1.27 12JH145 113.17 29.71 -1.6 1.27 2.51 166.341 1.27
190 1.36 22G-01 112.53 29.85 -141.1 1.36 8.17 517.61 1.36
191 1.44 22G-42 112.98 30.4 -93.8 1.44 4.32 314.24 1.44
192 1.48 22G-22 112.77 29.62 125.8 1.48 1.52 51.14 1.48
193 1.88 22G-91 112.39 29.66 177.2 1.88 4.19 164.61 1.88
Back to top

Copyright 2023, Yuxuan Xie

 
  • Edit this page
  • Report an issue