Intermediate

DataFrames

Work with tabular data using DataFrames.jl - Julia's equivalent of pandas, with powerful filtering, grouping, joining, and transformation capabilities.

Creating DataFrames

Julia
using DataFrames, CSV

# Create from columns
df = DataFrame(
    name = ["Alice", "Bob", "Charlie"],
    age = [30, 25, 35],
    salary = [75000, 62000, 90000]
)

# Load from CSV
df = CSV.read("data.csv", DataFrame)

# Basic inspection
first(df, 5)      # First 5 rows
describe(df)      # Summary statistics
names(df)         # Column names
size(df)          # (rows, cols)
nrow(df)          # Number of rows

Selecting and Filtering

Julia
# Select columns
df[:, [:name, :age]]
select(df, :name, :salary)

# Filter rows
filter(row -> row.age > 28, df)
subset(df, :age => x -> x .> 28)

# Sort
sort(df, :salary, rev=true)

# Add new columns with transform
transform(df, :salary => (s -> s ./ 12) => :monthly_pay)

GroupBy and Aggregation

Julia
using Statistics

# Group and aggregate (Split-Apply-Combine)
combine(
    groupby(df, :department),
    :salary => mean => :avg_salary,
    :salary => maximum => :max_salary,
    nrow => :count
)

# Multiple aggregations
gdf = groupby(df, [:department, :level])
result = combine(gdf,
    :salary => mean,
    :salary => std,
    :age => median
)

Joining DataFrames

Julia
employees = DataFrame(id=[1,2,3], name=["Alice","Bob","Charlie"], dept_id=[1,2,1])
departments = DataFrame(dept_id=[1,2], dept_name=["Engineering","Marketing"])

# Inner join
innerjoin(employees, departments, on=:dept_id)

# Left join
leftjoin(employees, departments, on=:dept_id)

# Outer join
outerjoin(employees, departments, on=:dept_id)

Missing Data

Julia
# Julia uses `missing` (not NaN or None)
df = DataFrame(x=[1, 2, missing, 4], y=["a", missing, "c", "d"])

# Drop rows with missing values
dropmissing(df)
dropmissing(df, :x)  # Only check column x

# Replace missing values
coalesce.(df.x, 0)  # Replace missing with 0

# Check for missing
ismissing.(df.x)
Tip: Julia's missing propagates through computations (like SQL's NULL). Use skipmissing() to exclude missing values from calculations: mean(skipmissing(df.x)).

Ready to Go Deeper?

Live instructor-led courses from our partners. Affiliate disclosure.