# \[ANN\] CSV.jl 0.7 Release

**URL:** <https://discourse.julialang.org/t/ann-csv-jl-0-7-release/42162>\
**Category:** Data\
**Created:** [June 27, 2020, 6:11pm UTC](https://discourse.julialang.org/t/ann-csv-jl-0-7-release/42162 "2020-06-27T18:11:14Z")\
**Posts on this page:** 1\
**Showing post:** 36

<div class="post-metadata">

**Author:** ![CameronBieganek](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cameronbieganek/32/6915_2.png) [@CameronBieganek](https://discourse.julialang.org/u/CameronBieganek)\
**Post date:** [July 18, 2020, 6:33pm UTC](https://discourse.julialang.org/t/ann-csv-jl-0-7-release/42162/36 "2020-07-18T18:33:25Z")

</div>

> [@quinnj](#):
>
> `CSV.read(file; kw...)` has been deprecated in favor of `DataFrame!(CSV.File(file; kw...))`

I would advise against using

```julia
DataFrame!(CSV.File(file; kw...))

```

if you plan on doing any mutating of your data frame. It’s safer to use

```julia
DataFrame(CSV.File(file; kw...))

```

Otherwise you’ll run into problems like this:

**“df.csv” file:**

```julia
x,y
a,1
b,2

```

**Code**

```julia
julia> using DataFrames, CSV

julia> df = DataFrame!(CSV.File("df.csv"))
2×2 DataFrame
│ Row │ x │ y │
│ │ String │ Int64 │
├─────┼────────┼───────┤
│ 1 │ a │ 1 │
│ 2 │ b │ 2 │

julia> filter!(r -> r.x == "b", df)
ERROR: MethodError: no method matching deleteat!(::CSV.Column{String,String}, ::Array{Int64,1})
Closest candidates are:
  deleteat!(::Array{T,1} where T, ::AbstractArray{T,1} where T) at array.jl:1275
  deleteat!(::Array{T,1} where T, ::Any) at array.jl:1274
  deleteat!(::BitArray{1}, ::Any) at bitarray.jl:962
  ...
Stacktrace:
 [1] (::DataFrames.var"#161#162"{Array{Int64,1}})(::CSV.Column{String,String}) at /Users/bieganek/.julia/packages/DataFrames/htZzm/src/dataframe/dataframe.jl:873
 [2] foreach(::DataFrames.var"#161#162"{Array{Int64,1}}, ::Array{AbstractArray{T,1} where T,1}) at ./abstractarray.jl:1919
 [3] delete!(::DataFrame, ::Array{Int64,1}) at /Users/bieganek/.julia/packages/DataFrames/htZzm/src/dataframe/dataframe.jl:873
 [4] _filter!_helper(::DataFrame, ::Function, ::DataFrames.DataFrameRows{DataFrame,DataFrames.Index}) at /Users/bieganek/.julia/packages/DataFrames/htZzm/src/abstractdataframe/abstractdataframe.jl:1075
 [5] filter!(::Function, ::DataFrame) at /Users/bieganek/.julia/packages/DataFrames/htZzm/src/abstractdataframe/abstractdataframe.jl:1056
 [6] top-level scope at REPL[3]:1

```

My actual code was more complicated, and I was getting an inscrutable `UndefRefError`:

```julia
ERROR: UndefRefError: access to undefined reference

```

so I wasted hours trying to figure out what the real problem was.

The `UndefRefError` that I got with my real code appears to be related to a `SentinelArray` column that was in the data frame that I got from `DataFrame!(CSV.File(file))`.

---

_[View the full topic](https://discourse.julialang.org/t/ann-csv-jl-0-7-release/42162)._
