pytae 3.7.2__tar.gz → 3.7.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. {pytae-3.7.2 → pytae-3.7.3}/PKG-INFO +1 -1
  2. {pytae-3.7.2 → pytae-3.7.3}/changelog.md +32 -0
  3. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/clean_replace.md +22 -0
  4. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/export_io.md +17 -5
  5. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/inspect.md +25 -0
  6. {pytae-3.7.2 → pytae-3.7.3}/docs/cli.md +5 -3
  7. {pytae-3.7.2 → pytae-3.7.3}/docs/library/other_utilities.ipynb +401 -65
  8. {pytae-3.7.2 → pytae-3.7.3}/docs/library.md +2 -1
  9. {pytae-3.7.2 → pytae-3.7.3}/pyproject.toml +1 -1
  10. {pytae-3.7.2 → pytae-3.7.3}/reference/pytae_reference.txt +487 -20
  11. {pytae-3.7.2 → pytae-3.7.3}/scripts/generate_reference.py +14 -2
  12. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/__init__.py +4 -0
  13. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/accessor.py +11 -0
  14. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/cli.py +38 -5
  15. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/cli_pipeline.py +15 -0
  16. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/cli_run.py +33 -3
  17. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/other_utilities.py +57 -0
  18. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/readers.py +37 -0
  19. pytae-3.7.3/tests/test_cli_new_features.py +87 -0
  20. {pytae-3.7.2 → pytae-3.7.3}/tests/test_utilities.py +29 -0
  21. {pytae-3.7.2 → pytae-3.7.3}/.githooks/pre-commit +0 -0
  22. {pytae-3.7.2 → pytae-3.7.3}/.github/workflows/ci.yml +0 -0
  23. {pytae-3.7.2 → pytae-3.7.3}/.gitignore +0 -0
  24. {pytae-3.7.2 → pytae-3.7.3}/LICENSE +0 -0
  25. {pytae-3.7.2 → pytae-3.7.3}/contributing.md +0 -0
  26. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/aggregate.md +0 -0
  27. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/diff.md +0 -0
  28. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/filter.md +0 -0
  29. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/multi_file.md +0 -0
  30. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/mutate.md +0 -0
  31. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/pivot.md +0 -0
  32. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/plotting.md +0 -0
  33. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/reshape.md +0 -0
  34. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/select.md +0 -0
  35. {pytae-3.7.2 → pytae-3.7.3}/docs/cli/sql.md +0 -0
  36. {pytae-3.7.2 → pytae-3.7.3}/docs/library/agg.ipynb +0 -0
  37. {pytae-3.7.2 → pytae-3.7.3}/docs/library/mutate.ipynb +0 -0
  38. {pytae-3.7.2 → pytae-3.7.3}/docs/library/pivot.ipynb +0 -0
  39. {pytae-3.7.2 → pytae-3.7.3}/docs/library/plotting.ipynb +0 -0
  40. {pytae-3.7.2 → pytae-3.7.3}/docs/library/qry.ipynb +0 -0
  41. {pytae-3.7.2 → pytae-3.7.3}/docs/library/reshape.ipynb +0 -0
  42. {pytae-3.7.2 → pytae-3.7.3}/docs/library/select.ipynb +0 -0
  43. {pytae-3.7.2 → pytae-3.7.3}/docs/library/sql.ipynb +0 -0
  44. {pytae-3.7.2 → pytae-3.7.3}/readme.md +0 -0
  45. {pytae-3.7.2 → pytae-3.7.3}/scripts/run_notebooks.py +0 -0
  46. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/__main__.py +0 -0
  47. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/_text.py +0 -0
  48. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/agg_df.py +0 -0
  49. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/cli_parsing.py +0 -0
  50. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/anagrams.parquet +0 -0
  51. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/anscombe.parquet +0 -0
  52. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/attention.parquet +0 -0
  53. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/brain_networks.parquet +0 -0
  54. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/car_crashes.parquet +0 -0
  55. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/diamonds.parquet +0 -0
  56. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/dots.parquet +0 -0
  57. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/dowjones.parquet +0 -0
  58. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/exercise.parquet +0 -0
  59. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/flights.parquet +0 -0
  60. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/fmri.parquet +0 -0
  61. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/geyser.parquet +0 -0
  62. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/glue.parquet +0 -0
  63. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/healthexp.parquet +0 -0
  64. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/iris.parquet +0 -0
  65. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/mpg.parquet +0 -0
  66. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/penguins.parquet +0 -0
  67. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/planets.parquet +0 -0
  68. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/seaice.parquet +0 -0
  69. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/taxis.parquet +0 -0
  70. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/tips.parquet +0 -0
  71. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/datasets/titanic.parquet +0 -0
  72. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/mutate.py +0 -0
  73. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/plotting.py +0 -0
  74. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/py.typed +0 -0
  75. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/qry.py +0 -0
  76. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/select.py +0 -0
  77. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/shape.py +0 -0
  78. {pytae-3.7.2 → pytae-3.7.3}/src/pytae/sql.py +0 -0
  79. {pytae-3.7.2 → pytae-3.7.3}/tests/__init__.py +0 -0
  80. {pytae-3.7.2 → pytae-3.7.3}/tests/cli_helpers.py +0 -0
  81. {pytae-3.7.2 → pytae-3.7.3}/tests/conftest.py +0 -0
  82. {pytae-3.7.2 → pytae-3.7.3}/tests/test_accessor.py +0 -0
  83. {pytae-3.7.2 → pytae-3.7.3}/tests/test_agg_df.py +0 -0
  84. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_agg.py +0 -0
  85. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_clean.py +0 -0
  86. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_enhancements.py +0 -0
  87. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_filter.py +0 -0
  88. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_inspect.py +0 -0
  89. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_merge.py +0 -0
  90. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_mutate.py +0 -0
  91. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_parse.py +0 -0
  92. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_reshape.py +0 -0
  93. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_sample_datasets.py +0 -0
  94. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_select.py +0 -0
  95. {pytae-3.7.2 → pytae-3.7.3}/tests/test_cli_sql.py +0 -0
  96. {pytae-3.7.2 → pytae-3.7.3}/tests/test_import.py +0 -0
  97. {pytae-3.7.2 → pytae-3.7.3}/tests/test_mutate.py +0 -0
  98. {pytae-3.7.2 → pytae-3.7.3}/tests/test_pivot.py +0 -0
  99. {pytae-3.7.2 → pytae-3.7.3}/tests/test_plotter.py +0 -0
  100. {pytae-3.7.2 → pytae-3.7.3}/tests/test_qry.py +0 -0
  101. {pytae-3.7.2 → pytae-3.7.3}/tests/test_readers.py +0 -0
  102. {pytae-3.7.2 → pytae-3.7.3}/tests/test_select.py +0 -0
  103. {pytae-3.7.2 → pytae-3.7.3}/tests/test_shape.py +0 -0
  104. {pytae-3.7.2 → pytae-3.7.3}/tests/test_sql.py +0 -0
  105. {pytae-3.7.2 → pytae-3.7.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: pytae
3
- Version: 3.7.2
3
+ Version: 3.7.3
4
4
  Summary: Fast, ergonomic pandas tools and zero-code CLI for tabular data manipulation and plotting
5
5
  Project-URL: Homepage, https://github.com/maddytae/pytae
6
6
  Project-URL: Bug Tracker, https://github.com/maddytae/pytae/issues
@@ -2,6 +2,38 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## [3.7.3] - 2026-10-04
6
+
7
+ ### Added
8
+ - **Transposed Summary (`glimpse`)**:
9
+ - Added `-glimpse` to the CLI and `df.pt.glimpse(width=None)` / `pt.glimpse(df)` to the Python library (inspired by `dplyr::glimpse` and Polars).
10
+ - Provides a transposed overview of rows count, columns count, column data types, and inline sample values.
11
+ - In Python, returns the original DataFrame `self` for non-destructive inspection mid-pipeline.
12
+ - **Auto-Pipe Detection (CLI)**:
13
+ - `pytae` automatically detects when data is piped via standard input (`stdin`) or redirected via shell, eliminating the requirement to pass a trailing `-` (e.g. `cat file.csv | pytae -head 5` works directly).
14
+ - Explicit `-` continues to be fully supported for standard unix pipeline workflows.
15
+ - **Clipboard Ingestion (`pytae clip`)**:
16
+ - Added `clip` as the canonical input target (`pytae clip [flags...]`).
17
+ - Reads tabular data directly from the system clipboard into the pipeline via `pd.read_clipboard()`, with optional delimiter override via `-dlim`.
18
+ - Strictly adheres to the "one and only one right way" philosophy: backward compatibility aliases `from_clip` and `clipboard` are removed.
19
+ - **Dedicated Row-Dropping Flag (`-drop_na`)**:
20
+ - Added `-drop_na [COLS]` to the CLI pipeline.
21
+ - Bare `-drop_na` drops rows containing `NaN` across any column; `-drop_na col1,col2` drops rows where specified columns are `NaN`.
22
+ - Runs in the cleaning/filtering stage before aggregations and transformations.
23
+
24
+ ## [3.7.2] - 2026-10-04
25
+
26
+ ### Fixed
27
+ - **Documentation & PyPI Link Targets**:
28
+ - Converted relative links in `readme.md` to absolute GitHub URLs so that documentation and Jupyter tutorial links resolve correctly on PyPI.
29
+
30
+ ## [3.7.1] - 2026-10-04
31
+
32
+ ### Documentation
33
+ - **Explicit Literal Constants with `pt.lit()`**:
34
+ - Clarified that `pt.lit("str")` is used exclusively in Python `pt.mutate()` when assigning string constants that match existing column names to avoid column aliasing.
35
+ - Clarified that `pt.lit()` is never required in the CLI or inside conditional expressions (`if_else`, `case_when`).
36
+
5
37
  ## [3.7.0] - 2026-09-29
6
38
 
7
39
  ### Added
@@ -17,6 +17,7 @@ Standardize messy column headers (`-clean_columns`), replace cell values (`-repl
17
17
  - [Restricting to Columns (`c=`)](#restricting-to-columns-c)
18
18
  - [Substring Replacement (`exact=false`)](#substring-replacement-exactfalse)
19
19
  - [Imputing Missing Values (`-handle_missing`)](#imputing-missing-values--handle_missing)
20
+ - [Dropping Missing Values (`-drop_na`)](#dropping-missing-values--drop_na)
20
21
  - [Column Renaming (`-rename`)](#column-renaming--rename)
21
22
 
22
23
  ---
@@ -28,6 +29,7 @@ Standardize messy column headers (`-clean_columns`), replace cell values (`-repl
28
29
  | `-clean_columns SPEC` | Column headers | `,` / `=` | Standardizes headers (strip, squeeze, fill, case, dedupe) |
29
30
  | `-replace_values SPEC` | Cell contents | `old:new` | Swaps values inside cells |
30
31
  | `-handle_missing [FILL]` | Cell contents | String value | Imputes `NaN` (defaults to `.` for text, `0` for numeric) |
32
+ | `-drop_na [COLS]` | Rows | `,` | Drops rows with `NaN` (bare for any column, or comma-separated columns) |
31
33
  | `-rename OLD:NEW,...` | Column headers | `old:new` | Explicitly renames column names |
32
34
 
33
35
  ---
@@ -126,6 +128,26 @@ pytae dataset.parquet -handle_missing "UNKNOWN"
126
128
 
127
129
  ---
128
130
 
131
+ ## Dropping Missing Values (`-drop_na`)
132
+
133
+ Drop rows containing missing values (`NaN`). Can be run bare to drop rows with `NaN` across any column, or scoped to specific target columns:
134
+
135
+ ```bash
136
+ # Drop rows with NaN in any column
137
+ pytae penguins.parquet -drop_na
138
+
139
+ # Drop rows with NaN in specific column(s)
140
+ pytae penguins.parquet -drop_na body_mass_g
141
+ pytae penguins.parquet -drop_na "body_mass_g,sex"
142
+ ```
143
+
144
+ > [!NOTE]
145
+ > **Difference between `-drop_na` and `-dropna`**:
146
+ > - **`-drop_na [cols]`**: Directly drops rows containing `NaN` from the dataset.
147
+ > - **`-dropna true|false`**: Controls whether group-by aggregations (`-by`, `-pivot`) include or drop a category for missing `NaN` keys.
148
+
149
+ ---
150
+
129
151
  ## Column Renaming (`-rename`)
130
152
 
131
153
  Rename columns explicitly at any point in the pipeline using the `old:new` mapping convention:
@@ -55,14 +55,16 @@ Export pipeline results, batch-convert datasets, route outputs to dedicated dire
55
55
 
56
56
  ## Reading from STDIN & Pipes (`-`, `-fmt`)
57
57
 
58
- `pytae` can read tabular streams directly from standard input (STDIN) using `-` as the input path, allowing seamless integration with UNIX pipes and shell pipelines:
58
+ `pytae` can read tabular streams directly from standard input (STDIN). With **auto-pipe detection**, you can pipe directly into `pytae` without typing an explicit `-`:
59
59
 
60
60
  ```bash
61
- # Pipe CSV stream into pytae
62
- cat penguins.csv | pytae - -head 5
61
+ # Direct pipe (no dash needed!)
62
+ cat penguins.csv | pytae -head 5
63
+ curl -s https://example.com/events.csv | pytae -by event_type -agg "count=n"
63
64
 
64
- # Stream from curl with explicit format
65
- curl -s https://example.com/events.jsonl | pytae - -fmt jsonl -by event_type -agg n
65
+ # Explicit dash also fully supported
66
+ cat penguins.csv | pytae - -head 5
67
+ curl -s https://example.com/events.jsonl | pytae - -fmt jsonl -by event_type -agg "count=n"
66
68
  ```
67
69
 
68
70
  When reading from STDIN, `pytae` automatically inspects the first chunk to sniff the format (`csv` vs `jsonl`). You can explicitly specify or force the input format using `-fmt`:
@@ -107,12 +109,22 @@ Wrote 344 rows to penguins.csv
107
109
 
108
110
  ### System Clipboard (`clip`)
109
111
 
112
+ #### Exporting to Clipboard (`-o clip`)
110
113
  Copies the output table or report directly to the system clipboard (suppressing stdout printing):
111
114
 
112
115
  ```bash
113
116
  pytae penguins.parquet -head 5 -o clip
114
117
  ```
115
118
 
119
+ #### Ingesting from Clipboard (`pytae clip`)
120
+ Directly read and analyze tabular data copied to your system clipboard (e.g. from Excel, web tables, or Slack) without creating a temporary file:
121
+
122
+ ```bash
123
+ # Copy a table in your browser/Excel, then immediately query it:
124
+ pytae clip -head 5
125
+ pytae clip -qry "sales > 100" -by region -agg "total = sales:sum"
126
+ ```
127
+
116
128
  ---
117
129
 
118
130
  ## Target Output Directory (`-out_dir` / `-od`)
@@ -41,6 +41,7 @@ Inspection flags let you understand a dataset's layout and content instantly fro
41
41
  | `-nulls [ORDER]` | Print count of missing / NaN values per column | **Yes** (terminal) |
42
42
  | `-meta` | Zero-scan Parquet metadata (row groups, compression, schema) | **Yes** (terminal) |
43
43
  | `-info` | Pandas `info()` memory and non-null summary | **Yes** (terminal) |
44
+ | `-glimpse` | Transposed column overview with dtypes and inline sample values | **Yes** (terminal) |
44
45
  | `-describe` | Pandas `describe()` statistical summary | No (returns DataFrame) |
45
46
  | `-pager` | Pipe long outputs through system pager (`$PAGER` or `less`) | Display flag |
46
47
  | `-pretty` | Render plain tables with bordered markdown formatting | Display flag |
@@ -334,6 +335,30 @@ Prints columns, non-null counts, dtypes, and memory usage:
334
335
  pytae penguins.parquet -info
335
336
  ```
336
337
 
338
+ ### Transposed Summary (`-glimpse`)
339
+
340
+ Inspired by `dplyr::glimpse()` and Polars, `-glimpse` provides an immediate, transposed view of all columns, displaying row count, column count, dtypes, and an inline preview of first values:
341
+
342
+ ```bash
343
+ pytae penguins.parquet -glimpse
344
+ ```
345
+
346
+ **Output:**
347
+ ```text
348
+ Rows: 344
349
+ Columns: 7
350
+ $ species <str> 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie...
351
+ $ island <str> 'Torgersen', 'Torgersen', 'Torgersen', 'Torgers...
352
+ $ bill_length_mm <float64> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 3...
353
+ $ bill_depth_mm <float64> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 1...
354
+ $ flipper_length_mm <float64> 181.0, 186.0, 195.0, NA, 193.0, 190.0, 181.0, 1...
355
+ $ body_mass_g <float64> 3750.0, 3800.0, 3250.0, NA, 3450.0, 3650.0, 362...
356
+ $ sex <str> 'Male', 'Female', 'Female', NA, 'Female', 'Male...
357
+ ```
358
+
359
+ > [!TIP]
360
+ > Unlike `-head`, which wraps across screen lines when dealing with wide tables (20–100+ columns), `-glimpse` guarantees that every column and its data type fit neatly on one line. It is also available in Python via `df.pt.glimpse()`.
361
+
337
362
  ---
338
363
 
339
364
  ## Terminal Paging (`-pager`)
@@ -66,17 +66,17 @@ For in-depth syntax rules, comprehensive parameter tables, corner cases, and ter
66
66
 
67
67
  | Feature Area | Documentation Guide | Key Flags & Capabilities |
68
68
  |---|---|---|
69
- | **Inspection & Metadata** | [Inspection & Metadata Guide](cli/inspect.md) | `-head`, `-tail`, `-sample`, `-shape`, `-cols`, `-dtype`, `-nulls`, `-describe`, `-info`, `-meta`, `-pager` |
69
+ | **Inspection & Metadata** | [Inspection & Metadata Guide](cli/inspect.md) | `-head`, `-tail`, `-sample`, `-shape`, `-cols`, `-dtype`, `-nulls`, `-describe`, `-info`, `-glimpse`, `-meta`, `-pager` |
70
70
  | **Column Selection** | [Column Selection Guide](cli/select.md) | `-select`, slices `a:b`, negative `-col`/`~col`, `exclude=`, `contains=`, `startswith=`, `regex=`, `dtype=numeric` |
71
71
  | **Row Filtering** | [Row Filtering Guide](cli/filter.md) | `-qry`, `-query`, `-dropna`, intervals `[min, max]`, set membership, comparisons |
72
72
  | **Feature Engineering** | [Mutating & Computing Guide](cli/mutate.md) | `-mutate`, formulas, arithmetic, boolean indicators, `@specs.txt`, functional helpers, `-by` grouped transforms |
73
73
  | **SQL Engine** | [DuckDB SQL Engine Guide](cli/sql.md) | `-sql`, querying table `data`, window functions, CTEs, `@query.sql`, zero-copy scan |
74
- | **Data Cleaning** | [Data Cleaning & Value Replacement Guide](cli/clean_replace.md) | `-clean_columns` (strip, squeeze, fill, case, dedupe), `-replace_values`, `-handle_missing`, `-rename` |
74
+ | **Data Cleaning** | [Data Cleaning & Value Replacement Guide](cli/clean_replace.md) | `-clean_columns` (strip, squeeze, fill, case, dedupe), `-replace_values`, `-handle_missing`, `-drop_na`, `-rename` |
75
75
  | **Aggregations & Grouping** | [Aggregations & Grouping Guide](cli/aggregate.md) | `-by` + `-agg` (group summaries & grand totals), `-by` + `-mutate` (grouped window transforms) |
76
76
  | **Reshaping & Matrices** | [Reshaping Guide](cli/reshape.md) • [2D Pivot Guide](cli/pivot.md) | `-long` (melt), `-wide` (pure reshape), `-pivot` (2D pivot table), `-value_counts`, `-unique`, `-sort_by` |
77
77
  | **Visualizations & Plots** | [Plotting Guide](cli/plotting.md) | `-freq` (ASCII bars), `-hist` (ASCII bins), `-plot` (export charts), `-finalize` |
78
78
  | **Dataset Comparison** | [Dataset & Schema Diffing Guide](cli/diff.md) | `-diff`, shape deltas, column changes, schema drift, null count variations, cell mismatches |
79
- | **File I/O & Compression** | [File I/O, Export, & Compression Guide](cli/export_io.md) | `-o`, `-out_dir`, STDIN (`-`), `-fmt`, `.parquet`, `.csv`, `.jsonl`, `.csv.gz`, `-progress` |
79
+ | **File I/O & Compression** | [File I/O, Export, & Compression Guide](cli/export_io.md) | `-o`, `-out_dir`, STDIN (`-`, auto-pipe), `clip`, `-fmt`, `.parquet`, `.csv`, `.jsonl`, `.csv.gz`, `-progress` |
80
80
  | **Multi-File Pipelines** | [Multi-File Pipelines Guide](cli/multi_file.md) | `-file`, `-merge` (joins), `-concat` (stacking), cross-file `-sql` |
81
81
 
82
82
  ---
@@ -326,6 +326,7 @@ pytae -file "jan.parquet=m1; feb.parquet=m2" \
326
326
  | `-nulls [asc\|desc]` | Inspect | Report null counts per column | [cli/inspect.md](cli/inspect.md) |
327
327
  | `-describe` | Inspect | Summary statistics (returns DataFrame) | [cli/inspect.md](cli/inspect.md) |
328
328
  | `-info` | Inspect | Pandas `info()` memory and non-null summary | [cli/inspect.md](cli/inspect.md) |
329
+ | `-glimpse` | Inspect | Transposed overview of columns, dtypes, and sample values | [cli/inspect.md](cli/inspect.md) |
329
330
  | `-meta` | Inspect | Zero-scan Parquet metadata (compression, row groups, schema) | [cli/inspect.md](cli/inspect.md) |
330
331
  | `-pager` | Inspect | Pipe terminal output through `$PAGER` or `less` | [cli/inspect.md](cli/inspect.md) |
331
332
  | `-pretty` | Inspect | Format output as bordered markdown table | [cli/inspect.md](cli/inspect.md) |
@@ -334,6 +335,7 @@ pytae -file "jan.parquet=m1; feb.parquet=m2" \
334
335
  | `-select SPEC` | Select & Filter | Filter, reorder, or exclude columns (names, slices, negative prefixes `-col`/`~col`, `exclude=`, regex, dtype) | [cli/select.md](cli/select.md) |
335
336
  | `-qry CONDITIONS` | Select & Filter | Filter rows using pytae keyword syntax and intervals | [cli/filter.md](cli/filter.md) |
336
337
  | `-query EXPR` | Select & Filter | Filter rows using pandas `df.query()` expression | [cli/filter.md](cli/filter.md) |
338
+ | `-drop_na [COLS]` | Select & Filter | Drop rows containing NaN (bare for any column, or comma-separated columns) | [cli/clean_replace.md](cli/clean_replace.md) |
337
339
  | `-dropna BOOL` | Select & Filter | Control whether NA grouping keys are dropped in aggregations, mutations, value counts, and pivots (default: false) | [cli/filter.md](cli/filter.md) |
338
340
  | `-mutate SPEC` | Transform | Create or overwrite columns via formulas / helpers | [cli/mutate.md](cli/mutate.md) |
339
341
  | `-sql QUERY` | Transform | Execute SQL query via DuckDB against table `data` | [cli/sql.md](cli/sql.md) |