# Convert Dataframe column containing strings "A+", "A", "A-" ..."D+", "D", "D-" to integers 12,11,10 ... 3,2,1

**URL:** <https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849>\
**Category:** New to Julia\
**Created:** [July 26, 2022, 10:02pm UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849 "2022-07-26T22:02:59Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Nash](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nash/32/14482_2.png) [@Nash](https://discourse.julialang.org/u/Nash)\
**Post date:** [July 26, 2022, 10:02pm UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849/1 "2022-07-26T22:02:59Z")

</div>

I have a dataframe where one of the columns is Grades. Grades contains strings for scores on the scale A+ to D-. How do I go about converting this information to integers instead on a 12-point scale (“A+” = 12, …, “D-” = 1)?

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [July 26, 2022, 11:04pm UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849/2 "2022-07-26T23:04:49Z")

</div>

Could you create a `Dict{String, Int8}` for the mapping?

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [July 26, 2022, 11:21pm UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849/3 "2022-07-26T23:21:37Z")

</div>

```julia
julia> using DataFramesMeta; 

julia> grades_df = DataFrame(grade = ["A+", "B", "B-"]);

julia> grades_mapping = Dict("A+" => 12, "A" => 11, "A-" => 10, "B+" => 9, "B" => 8, "B-" => 7);

julia> @rtransform grades_df :grade_num = grades_mapping[:grade]
3×2 DataFrame
 Row │ grade grade_num
     │ String Int64
─────┼───────────────────
   1 │ A+ 12
   2 │ B 8
   3 │ B- 7

```

---

<div class="post-metadata">

**Author:** ![stillyslalom](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stillyslalom/32/45687_2.png) [@stillyslalom](https://discourse.julialang.org/u/stillyslalom)\
**Post date:** [July 27, 2022, 1:05am UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849/4 "2022-07-27T01:05:56Z")

</div>

```julia
julia> Dict(g => n for (n, g) in enumerate(hcat("DCBA"...) .* ["-", "", "+"]))
Dict{String, Int64} with 12 entries:
  "A" => 11
  "C" => 5
  "C-" => 4
  "D" => 2
  "D+" => 3
  "B-" => 7
  "D-" => 1
  "B" => 8
  "C+" => 6
  "B+" => 9
  "A+" => 12
  "A-" => 10

```

---

<div class="post-metadata">

**Author:** ![Nash](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nash/32/14482_2.png) [@Nash](https://discourse.julialang.org/u/Nash)\
**Post date:** [July 27, 2022, 10:53am UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849/5 "2022-07-27T10:53:02Z")

</div>

> [@pdeffebach](#):
>
> `@rtransform`

I get an error “ERROR: LoadError: UndefVarError: @rtransform not defined”

---

<div class="post-metadata">

**Author:** ![mthelm85](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mthelm85/32/224164_2.png) [@mthelm85](https://discourse.julialang.org/u/mthelm85)\
**Post date:** [July 27, 2022, 11:26am UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849/6 "2022-07-27T11:26:53Z")

</div>

> [@Nash](#):
>
> I get an error “ERROR: LoadError: UndefVarError: @rtransform not defined”

Make sure you are `using DataFramesMeta`.

---

<div class="post-metadata">

**Author:** ![Nash](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nash/32/14482_2.png) [@Nash](https://discourse.julialang.org/u/Nash)\
**Post date:** [July 27, 2022, 11:49am UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849/7 "2022-07-27T11:49:41Z")

</div>

> [@pdeffebach](#):
>
> `DataFramesMeta`

I am indeed, but I still get the error. Could it be that I am using an old version of Julia? v1.6.28

---

<div class="post-metadata">

**Author:** ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)\
**Post date:** [July 27, 2022, 12:30pm UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849/8 "2022-07-27T12:30:33Z")

</div>

1.6.28 is not a Julia version (latest patch release in the 1.6 series is 1.6.7).

The relevant question is what version of DataFramesMeta you’re using.

You can also work without DataFramesMeta and just do

```julia
grades_df.grade_num = [grades_mapping[x] for x in grades_df.grade]

```

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [July 27, 2022, 2:05pm UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849/9 "2022-07-27T14:05:58Z")

</div>

Please run `] up DataFramesMeta` to get the latest version.

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [July 27, 2022, 2:30pm UTC](https://discourse.julialang.org/t/convert-dataframe-column-containing-strings-a-a-a-d-d-d-to-integers-12-11-10-3-2-1/84849/10 "2022-07-27T14:30:42Z")

</div>

Another variation to build the dictionary and broadcast it:

```julia
using DataFrames
df = DataFrame(grade = ["A+", "B", "B-", "C", "D-"])
grades_dic = Dict(vec(['A' 'B' 'C' 'D'] .* ["+","","-"]) .=> 12:-1:1)
df.grade_num = getindex.((grades_dic,), df.grade) 
df 

```
