【问题标题】:CSV.File ignores optionsCSV.File 忽略选项
【发布时间】:2021-04-08 14:58:22
【问题描述】:

我对 Julia 的 pandas 有疑问。看看这段代码。我正在尝试读取 csv 并将其转换为 pandas 数据框。但是标题没有被接受。好的,所以我用谷歌搜索选项并将标题设置为 1。但它不起作用。我还设置了 Datatypes 手册,因为前两个应该是 Float64,最后一个应该是 Int。我没有收到错误消息,但如果我手动设置类型,所有列都是浮点数。那不是我想要设置的。也许是朱莉娅初学者的错误。

 julia> using Pandas
 
 julia> using CSV
 
 julia> ofenbelegung_df = CSV.File("dichte.csv"; header=1,types=[Float64, Float64, Int]) |> DataFrame
          0       1    2
 0     20.0  7863.0  1.0
 1    100.0  7834.0  1.0
 2    200.0  7803.0  1.0
 3    300.0  7770.0  1.0
 4    400.0  7736.0  1.0
 
 
 julia> ofenbelegung_df = CSV.File("dichte.csv"; types=[Float64, Float64, Int]) |> DataFrame
          0       1    2
 0     20.0  7863.0  1.0
 1    100.0  7834.0  1.0
 2    200.0  7803.0  1.0
 3    300.0  7770.0  1.0
 4    400.0  7736.0  1.0
 
 
 julia> ofenbelegung_df = CSV.File("dichte.csv") |> DataFrame
        0     1  2
 0     20  7863  1
 1    100  7834  1
 2    200  7803  1
 3    300  7770  1
 4    400  7736  1
 
 julia> 
 

原始 csv 文件

Temp;Val;Gr
20;7863;1
100;7834;1
200;7803;1

【问题讨论】:

    标签: pandas dataframe csv julia


    【解决方案1】:

    这两个问题都出在 Pandas.jl 而不是 CSV.jl(特别是 header=1 是默认值,因此以这种方式传递它没有效果)

    这是一个例子

    julia> using CSV, Pandas, Tables
    
    julia> file = IOBuffer("""Temp;Val;Gr
           20;7863;1
           100;7834;1
           200;7803;1""")
    IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=43, maxsize=Inf, ptr=1, mark=-1)
    
    julia> CSV.File(file, types=[Float64, Float64, Int]) |> DataFrame
           0       1    2
    0   20.0  7863.0  1.0
    1  100.0  7834.0  1.0
    2  200.0  7803.0  1.0
    
    
    julia> CSV.File(file, types=[Float64, Float64, Int]) |> columntable
    (Temp = [20.0, 100.0, 200.0], Val = [7863.0, 7834.0, 7803.0], Gr = [1, 1, 1])
    

    Pandas.jl 的解决方法是:

    julia> CSV.File(file, types=[Float64, Float64, Int]) |> columntable |> pairs |> DataFrame
        Temp     Val  Gr
    0   20.0  7863.0   1
    1  100.0  7834.0   1
    2  200.0  7803.0   1
    

    请注意,如果您使用 DataFrames.jl 而不是 Pandas.jl,则一切都是正确的:

    julia> using CSV, DataFrames
    
    julia> file = IOBuffer("""Temp;Val;Gr
           20;7863;1
           100;7834;1
           200;7803;1""")
    IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=43, maxsize=Inf, ptr=1, mark=-1)
    
    julia> CSV.File(file, types=[Float64, Float64, Int]) |> DataFrame
    3×3 DataFrame
     Row │ Temp     Val      Gr    
         │ Float64  Float64  Int64 
    ─────┼─────────────────────────
       1 │    20.0   7863.0      1
       2 │   100.0   7834.0      1
       3 │   200.0   7803.0      1
    

    (由于 Pandas.jl 和 DataFrames.jl 包之间的名称冲突,我正在使用新的 Julia 会话。

    【讨论】:

    • 另一种方法是使用 Pandas.read_csv() 而不是 CSV.jl。但是 DataFrames.jl 而不是 Pandas 是更好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2016-03-10
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多