# Column
URL: https://lsd.tools/docs/api-column
Updated: 2026-07-17

`t["name"]` returns a `Column` — a lazy expression over one pyarrow `ChunkedArray`. You build it
with ordinary Python operators, then hand it to [`filter`](/docs/api-table-filter) or
[`with_column`](/docs/api-table-with-column). Each operator compiles to a **single**
`pyarrow.compute` kernel and returns a new `Column`, so `t["x"] * 2` and `t["g"] > 0.5` stay
whole-column and C++-fast — no Python row loop ever runs.

| Category | Operators | Result |
|---|---|---|
| Arithmetic | `+` `-` `*` `/` | a numeric `Column` |
| Comparison | `>` `>=` `<` `<=` `==` `!=` | a boolean `Column` (a mask) |
| Boolean | `&` (and) · `\|` (or) · `~` (not) | a boolean `Column` |
| Null checks | `is_valid()` · `is_null()` | a boolean `Column` |

## Usage

```python
from lsdtools import Table

t = Table({"name": ["ann", None, "cy"], "score": [12, 30, 7]})
mask = (t["score"] > 10) & t["name"].is_valid()
t.filter(mask).print()
# → name:["ann"] score:[12]
```

Build a derived column the same way and store it with `with_column`:

```python
t.with_column("bonus", t["score"] * 2)
```

## Where to start

**Learn** — [Tables & data flow](/docs/tools-tables) · [Shape steps](/docs/tools-shape)

**Examples** — [Clean a CSV](/docs/ex-clean-csv)

**API** — [Table](/docs/api-table) · [filter](/docs/api-table-filter) · [with_column](/docs/api-table-with-column)
