Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" name: lasio description: | Read, write, and manipulate LAS (Log ASCII Standard) well log files for borehole geophysical and petrophysical data. Use when the agent needs to: (1) Read/parse LAS 1.2 or 2.0 files, (2) Extract well headers or curve data, (3) Convert LAS to DataFrame/CSV/Excel, (4) Create new LAS files from arrays, (5) Modify existing LAS files, (6) Handle problematic or malformed LAS files, (7) Batch process multiple well files. license: MIT metadata: version: 1.0.2 author: Geoscience Skills tags: '["Well Logs", "LAS", "Petrophysics", "Data I/O", "Lasio", "CWLS", "Wireline", "Borehole"]' dependencies: '["lasio>=0.30", "numpy", "pandas"]' complements: '["welly", "petropy", "striplog"]' workflow_role: data-loading skill_type: domain
lasio - LAS Well Log Files
Quick Reference
import lasio# Readlas = lasio.read("well.las")# Access datadf = las.df() # DataFrame (depth as index)gr = las['GR'] # Single curve as numpy arraydepth = las['DEPT']# Well infowell_name = las.well['WELL'].valueuwi = las.well['UWI'].value# Writelas.write('output.las')
Key Classes
| Class | Purpose | |
|---|---|---|
LASFile | Main container - holds headers, curves, data | |
CurveItem | Single curve with mnemonic, unit, data array | |
HeaderItem | Header entry (mnemonic, unit, value, descr) |
Essential Operations
Read and Inspect
las = lasio.read("well.las")print(las.curves.keys()) # Available curvesprint(las.well) # Well section headersprint(las.version) # LAS version info
Access Curve Data
# As numpy arraysgr = las['GR']depth = las['DEPT']# With metadatacurve = las.curves['GR']print(curve.unit, curve.descr) # 'GAPI', 'Gamma Ray'
Create New LAS
import numpy as nplas = lasio.LASFile()las.well['WELL'] = lasio.HeaderItem('WELL', value='Test-1')las.well['UWI'] = lasio.HeaderItem('UWI', value='12345678901234')depth = np.arange(1000, 2000, 0.5)las.append_curve('DEPT', depth, unit='M', descr='Depth')las.append_curve('GR', gr_data, unit='GAPI', descr='Gamma Ray')las.write('output.las')
Modify Existing
las = lasio.read("well.las")las.append_curve('GR_NORM', las['GR'] / 150, unit='V/V')del las.curves['BAD_CURVE']las.well['WELL'].value = 'New Name'las.write('modified.las')
Handle Problematic Files
# Ignore header errorslas = lasio.read("messy.las", ignore_header_errors=True)# Check null valuenull_val = las.well['NULL'].value # Usually -999.25
Null Value Handling
LAS files use a specific null value (typically -999.25). Always check and handle:
import numpy as npnull_val = float(las.well['NULL'].value)df = las.df().replace(null_val, np.nan)
Batch Processing
from pathlib import Pathfor path in Path('wells/').glob('*.las'):las = lasio.read(path)df = las.df()# Process...
When to Use vs Alternatives
| Tool | Best For | |
|---|---|---|
| lasio | Direct LAS file I/O, header manipulation, format conversion | |
| welly | Higher-level well analysis, curve processing, multi-well projects | |
| dlisio | DLIS/RP66 binary format files (not LAS) |
Use lasio when you need low-level control over LAS file reading/writing, need to handle malformed files, or want to programmatically build LAS files.
Use welly instead when you need curve processing (despike, normalize), multi-well project management, or formation tops. Welly uses lasio internally.
Use dlisio instead when your data is in DLIS format. DLIS files are binary, support multi-frame data and array logs -- lasio cannot read them.
Common Workflows
Read, QC, and export well log data
- [ ] Read LAS file with `lasio.read()`, handle encoding if needed- [ ] Inspect curves: `las.curves.keys()` and well headers- [ ] Replace null values: `df.replace(null_val, np.nan)`- [ ] Validate depth range and sample interval- [ ] Check for missing curves or anomalous values- [ ] Export to DataFrame with `las.df()` or write cleaned LAS
Common Issues
| Issue | Solution | |
|---|---|---|
| Encoding errors | lasio.read(f, encoding='latin-1') | |
| Missing curves | Check las.curves.keys() first | |
| Header errors | Use ignore_header_errors=True | |
| Wrong null value | Check las.well['NULL'].value |
References
- [Curve Mnemonics](references/curve_mnemonics.md) - Standard curve names and units
- [Troubleshooting](references/troubleshooting.md) - Common problems and solutions
- [LAS File Structure](references/file_structure.md) - Detailed format specification
Scripts
- [scripts/validate_las.py](scripts/validate_las.py) - Validate LAS file format
- [scripts/las_to_csv.py](scripts/las_to_csv.py) - Convert LAS to CSV
- [scripts/merge_curves.py](scripts/merge_curves.py) - Merge curves from multiple files