所以我只想将 DataFrame 写入 csv 文件(或 xlsx)。但是在执行代码来填充 DataFrame 并能够在控制台中看到它之后,我无法保存它。(无论是加载了 CSV 包还是 xlsx 包的 .csv 或 .xlsx)。
微量元素:
using DataFrames
using CSV
df = DataFrame([String,Float64,Float64],["a","b","c"], 1000)
CSV.write("Trial_Julia_Output.csv", df)
Run Code Online (Sandbox Code Playgroud)
这失败了
UndefRefError: access to undefined reference
我究竟做错了什么?
堆栈跟踪:
[1] getindex(::Array{String,1}, ::Int64) at .\array.jl:809
[2] getindex at C:\Users\chris\.julia\packages\DataFrames\oQ5c7\src\dataframe\dataframe.jl:400 [inlined]
[3] getindex at C:\Users\chris\.julia\packages\DataFrames\oQ5c7\src\dataframerow\dataframerow.jl:212 [inlined]
[4] getcolumn(::DataFrameRow{DataFrame,DataFrames.Index}, ::Symbol) at C:\Users\chris\.julia\packages\DataFrames\oQ5c7\src\other\tables.jl:31
[5] getcolumn at C:\Users\chris\.julia\packages\Tables\UxLRG\src\Tables.jl:101 [inlined]
[6] eachcolumn at C:\Users\chris\.julia\packages\Tables\UxLRG\src\utils.jl:70 [inlined]
[7] writerow(::Array{UInt8,1}, ::Base.RefValue{Int64}, ::Int64, ::IOStream, ::Tables.Schema{(:a, :b, :c),Tuple{String,Float64,Float64}}, ::DataFrameRow{DataFrame,DataFrames.Index}, ::Int64, ::CSV.Options{UInt8,UInt8,Nothing,Tuple{},CSV.var"#60#63"}) at C:\Users\chris\.julia\packages\CSV\CJfFO\src\write.jl:342
[8] #66 at C:\Users\chris\.julia\packages\CSV\CJfFO\src\write.jl:215 [inlined]
[9] (::CSV.var"#73#74"{CSV.var"#66#67"{Bool,Bool,Tables.Schema{(:a, :b, :c),Tuple{String,Float64,Float64}},DataFrames.DataFrameRows{DataFrame,DataFrames.Index},CSV.Options{UInt8,UInt8,Nothing,Tuple{},CSV.var"#60#63"},Tuple{Symbol,Symbol,Symbol},Int64,Int64,Array{UInt8,1}}})(::IOStream) at C:\Users\chris\.julia\packages\CSV\CJfFO\src\write.jl:279
[10] open(::CSV.var"#73#74"{CSV.var"#66#67"{Bool,Bool,Tables.Schema{(:a, :b, :c),Tuple{String,Float64,Float64}},DataFrames.DataFrameRows{DataFrame,DataFrames.Index},CSV.Options{UInt8,UInt8,Nothing,Tuple{},CSV.var"#60#63"},Tuple{Symbol,Symbol,Symbol},Int64,Int64,Array{UInt8,1}}}, ::String, ::Vararg{String,N} where N; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at .\io.jl:325
[11] open at .\io.jl:323 [inlined]
[12] with at C:\Users\chris\.julia\packages\CSV\CJfFO\src\write.jl:278 [inlined]
[13] #write#65 at C:\Users\chris\.julia\packages\CSV\CJfFO\src\write.jl:205 [inlined]
[14] write(::String, ::DataFrame; delim::Char, quotechar::Char, openquotechar::Nothing, closequotechar::Nothing, escapechar::Char, newline::Char, decimal::Char, dateformat::Nothing, quotestrings::Bool, missingstring::String, transform::CSV.var"#60#63", bom::Bool, append::Bool, writeheader::Nothing, partition::Bool, kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at C:\Users\chris\.julia\packages\CSV\CJfFO\src\write.jl:191
[15] write(::String, ::DataFrame) at C:\Users\chris\.julia\packages\CSV\CJfFO\src\write.jl:152
[16] top-level scope at In[36]:2
[17] include_string(::Function, ::Module, ::String, ::String) at .\loading.jl:1091
Run Code Online (Sandbox Code Playgroud)
问题是您正在创建的数据框在第一列中有未定义的元素:
\njulia> df = DataFrame([String, Float64, Float64], ["a","b","c"], 2)\n2\xc3\x973 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 a \xe2\x94\x82 b \xe2\x94\x82 c \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 String \xe2\x94\x82 Float64 \xe2\x94\x82 Float64 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 1 \xe2\x94\x82 #undef \xe2\x94\x82 5.0e-324 \xe2\x94\x82 2.33319e-314 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 #undef \xe2\x94\x82 0.0 \xe2\x94\x82 2.33319e-314 \xe2\x94\x82\n\njulia> df[1, 1]\nERROR: UndefRefError: access to undefined reference\nRun Code Online (Sandbox Code Playgroud)\n如果定义了这些元素,则可以将数据框写入 CSV 文件:
\njulia> df.a .= ["hello", "world"]\n2-element Array{String,1}:\n "a"\n "b"\n\njulia> CSV.write("df.csv", df)\n"df.csv"\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
427 次 |
| 最近记录: |