Monday, September 11, 2017

Julia - Language - DataFrames - Handling Duplicate rows in DataFrames

Duplicate Rows:


Data Entry is the caputring of data points. It is almost never a clean process. The repeat entry of data is one common mistake that is made when data is captured. Removal of duplicate entries is using the unique() function. Selected rows can also be removed for any reason [not just because they are duplicate rows] using the deleterows!() function. Adding a bang (!) , that is unique!(), results in a function that makes the changes permanent. 

$ julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: https://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.6.0 (2017-06-19 13:05 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org/ release
|__/                   |  x86_64-pc-linux-gnu

julia> using DataFrames;

julia> my_movies_df = DataFrame(MovieName=["Amistad","Batman Begins","Catch Me If You Can","Dunkirk","Empire of the Sun","Firelight","Gladiator","Hannibal","Interstellar","Jaws","King Arthur","Lincoln","Memento","Amistad"],Director=["Steven Spielberg","Christopher Nolan","Steven Spielberg","Christopher Nolan","Steven Spielberg","Steven Spielberg","Ridley Scott","Ridley Scott","Christopher Nolan","Steven Spielberg","Antoine Fuqua","Steven Spielberg","Christopher Nolan","Steven Spielberg"]);

julia> my_movies_df
14×2 DataFrames.DataFrame
│ Row │ MovieName             │ Director            │
├─────┼───────────────────────┼─────────────────────┤
│ 1   │ "Amistad"             │ "Steven Spielberg"  │
│ 2   │ "Batman Begins"       │ "Christopher Nolan" │
│ 3   │ "Catch Me If You Can" │ "Steven Spielberg"  │
│ 4   │ "Dunkirk"             │ "Christopher Nolan" │
│ 5   │ "Empire of the Sun"   │ "Steven Spielberg"  │
│ 6   │ "Firelight"           │ "Steven Spielberg"  │
│ 7   │ "Gladiator"           │ "Ridley Scott"      │
│ 8   │ "Hannibal"            │ "Ridley Scott"      │
│ 9   │ "Interstellar"        │ "Christopher Nolan" │
│ 10  │ "Jaws"                │ "Steven Spielberg"  │
│ 11  │ "King Arthur"         │ "Antoine Fuqua"     │
│ 12  │ "Lincoln"             │ "Steven Spielberg"  │
│ 13  │ "Memento"             │ "Christopher Nolan" │
│ 14  │ "Amistad"             │ "Steven Spielberg"  │

julia> 

Applying the unique() function to display the non-duplicate entries:

julia> unique(my_movies_df)
13×2 DataFrames.DataFrame
│ Row │ MovieName             │ Director            │
├─────┼───────────────────────┼─────────────────────┤
│ 1   │ "Amistad"             │ "Steven Spielberg"  │
│ 2   │ "Batman Begins"       │ "Christopher Nolan" │
│ 3   │ "Catch Me If You Can" │ "Steven Spielberg"  │
│ 4   │ "Dunkirk"             │ "Christopher Nolan" │
│ 5   │ "Empire of the Sun"   │ "Steven Spielberg"  │
│ 6   │ "Firelight"           │ "Steven Spielberg"  │
│ 7   │ "Gladiator"           │ "Ridley Scott"      │
│ 8   │ "Hannibal"            │ "Ridley Scott"      │
│ 9   │ "Interstellar"        │ "Christopher Nolan" │
│ 10  │ "Jaws"                │ "Steven Spielberg"  │
│ 11  │ "King Arthur"         │ "Antoine Fuqua"     │
│ 12  │ "Lincoln"             │ "Steven Spielberg"  │
│ 13  │ "Memento"             │ "Christopher Nolan" │

julia> my_movies_df
14×2 DataFrames.DataFrame
│ Row │ MovieName             │ Director            │
├─────┼───────────────────────┼─────────────────────┤
│ 1   │ "Amistad"             │ "Steven Spielberg"  │
│ 2   │ "Batman Begins"       │ "Christopher Nolan" │
│ 3   │ "Catch Me If You Can" │ "Steven Spielberg"  │
│ 4   │ "Dunkirk"             │ "Christopher Nolan" │
│ 5   │ "Empire of the Sun"   │ "Steven Spielberg"  │
│ 6   │ "Firelight"           │ "Steven Spielberg"  │
│ 7   │ "Gladiator"           │ "Ridley Scott"      │
│ 8   │ "Hannibal"            │ "Ridley Scott"      │
│ 9   │ "Interstellar"        │ "Christopher Nolan" │
│ 10  │ "Jaws"                │ "Steven Spielberg"  │
│ 11  │ "King Arthur"         │ "Antoine Fuqua"     │
│ 12  │ "Lincoln"             │ "Steven Spielberg"  │
│ 13  │ "Memento"             │ "Christopher Nolan" │
│ 14  │ "Amistad"             │ "Steven Spielberg"  │

julia>


To make it permanent we need to use the unique!() function (Notice the Bang(!)):

julia> unique!(my_movies_df)
13×2 DataFrames.DataFrame
│ Row │ MovieName             │ Director            │
├─────┼───────────────────────┼─────────────────────┤
│ 1   │ "Amistad"             │ "Steven Spielberg"  │
│ 2   │ "Batman Begins"       │ "Christopher Nolan" │
│ 3   │ "Catch Me If You Can" │ "Steven Spielberg"  │
│ 4   │ "Dunkirk"             │ "Christopher Nolan" │
│ 5   │ "Empire of the Sun"   │ "Steven Spielberg"  │
│ 6   │ "Firelight"           │ "Steven Spielberg"  │
│ 7   │ "Gladiator"           │ "Ridley Scott"      │
│ 8   │ "Hannibal"            │ "Ridley Scott"      │
│ 9   │ "Interstellar"        │ "Christopher Nolan" │
│ 10  │ "Jaws"                │ "Steven Spielberg"  │
│ 11  │ "King Arthur"         │ "Antoine Fuqua"     │
│ 12  │ "Lincoln"             │ "Steven Spielberg"  │
│ 13  │ "Memento"             │ "Christopher Nolan" │

julia> my_movies_df
13×2 DataFrames.DataFrame
│ Row │ MovieName             │ Director            │
├─────┼───────────────────────┼─────────────────────┤
│ 1   │ "Amistad"             │ "Steven Spielberg"  │
│ 2   │ "Batman Begins"       │ "Christopher Nolan" │
│ 3   │ "Catch Me If You Can" │ "Steven Spielberg"  │
│ 4   │ "Dunkirk"             │ "Christopher Nolan" │
│ 5   │ "Empire of the Sun"   │ "Steven Spielberg"  │
│ 6   │ "Firelight"           │ "Steven Spielberg"  │
│ 7   │ "Gladiator"           │ "Ridley Scott"      │
│ 8   │ "Hannibal"            │ "Ridley Scott"      │
│ 9   │ "Interstellar"        │ "Christopher Nolan" │
│ 10  │ "Jaws"                │ "Steven Spielberg"  │
│ 11  │ "King Arthur"         │ "Antoine Fuqua"     │
│ 12  │ "Lincoln"             │ "Steven Spielberg"  │
│ 13  │ "Memento"             │ "Christopher Nolan" │

julia> 

Observe that the original dataset has got modified. It has one less row as the non-unique entry has been removed.


deleterows!()


To delete any set of rows we can use deleterows!() function. 

julia> deleterows!(my_movies_df,[5,6,7])
10×2 DataFrames.DataFrame
│ Row │ MovieName             │ Director            │
├─────┼───────────────────────┼─────────────────────┤
│ 1   │ "Amistad"             │ "Steven Spielberg"  │
│ 2   │ "Batman Begins"       │ "Christopher Nolan" │
│ 3   │ "Catch Me If You Can" │ "Steven Spielberg"  │
│ 4   │ "Dunkirk"             │ "Christopher Nolan" │
│ 5   │ "Hannibal"            │ "Ridley Scott"      │
│ 6   │ "Interstellar"        │ "Christopher Nolan" │
│ 7   │ "Jaws"                │ "Steven Spielberg"  │
│ 8   │ "King Arthur"         │ "Antoine Fuqua"     │
│ 9   │ "Lincoln"             │ "Steven Spielberg"  │
│ 10  │ "Memento"             │ "Christopher Nolan" │

julia> deleterows!(my_movies_df,8:10)
7×2 DataFrames.DataFrame
│ Row │ MovieName             │ Director            │
├─────┼───────────────────────┼─────────────────────┤
│ 1   │ "Amistad"             │ "Steven Spielberg"  │
│ 2   │ "Batman Begins"       │ "Christopher Nolan" │
│ 3   │ "Catch Me If You Can" │ "Steven Spielberg"  │
│ 4   │ "Dunkirk"             │ "Christopher Nolan" │
│ 5   │ "Hannibal"            │ "Ridley Scott"      │
│ 6   │ "Interstellar"        │ "Christopher Nolan" │
│ 7   │ "Jaws"                │ "Steven Spielberg"  │

julia> 

No comments:

Post a Comment