{"record":{"id":"f0be7d47b08ef581","repo":"nautechsystems/nautilus_trader","slug":"pandas-is-required-for-visualization-install-it-w","errorCode":null,"errorMessage":"pandas is required for visualization; install it with `pip install nautilus_trader[visualization]`","messagePattern":"pandas is required for visualization; install it with `pip install nautilus_trader\\[visualization\\]`","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"python/nautilus_trader/analysis/tearsheet.py","lineNumber":63,"sourceCode":"    import pandas as pd\n\n    from nautilus_trader.analysis.config import GridLayout\n    from nautilus_trader.analysis.config import TearsheetChart\n    from nautilus_trader.backtest import BacktestEngine\n    from nautilus_trader.backtest import BacktestNode\n    from nautilus_trader.backtest import BacktestResult\n    from nautilus_trader.common import Cache\n    from nautilus_trader.model import Currency\n    from nautilus_trader.model import PortfolioSnapshot\n    from nautilus_trader.model import Venue\n    from nautilus_trader.portfolio import Portfolio\n\n\ndef _require_pandas() -> ModuleType:\n    try:\n        import pandas as pd\n    except ImportError as e:\n        raise ImportError(\n            \"pandas is required for visualization; install it with \"\n            \"`pip install nautilus_trader[visualization]`\",\n        ) from e\n\n    return pd\n\n\nif not TYPE_CHECKING:\n\n    class _PandasProxy:\n        def __getattr__(self, name: str) -> Any:\n            return getattr(_require_pandas(), name)\n\n    pd = _PandasProxy()\n\n\ntry:\n    import plotly.graph_objects as go","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/python/nautilus_trader/analysis/tearsheet.py#L45-L81","documentation":"Same as the ts_event lookup, but for the ts_init column: when use_ts_event_for_ts_init is true, apply_stream_conversion_transforms needs a ts_init column to overwrite with ts_event values. schema.index_of(\"ts_init\") fails because the batch schema contains no ts_init column, so this error is raised.","triggerScenarios":"Running the stream conversion with use_ts_event_for_ts_init = true on batches whose schema lacks a ts_init column.","commonSituations":"Stream recordings from data writers that emitted only ts_event; custom data encoders that omitted ts_init; mixing batches from different writer versions where some carry ts_init and others do not.","solutions":["Confirm the source batches include ts_init (batch.schema().column_with_name(\"ts_init\")) before enabling the conversion.","If ts_init is genuinely absent, either add a ts_init column when writing the data or handle the data without the ts_event-for-ts_init substitution.","Re-record/re-export the stream with the current writer version so both timestamp columns are present.","Ensure all batches fed to the conversion come from a consistent schema/writer version."],"exampleFix":"// before\nlet opts = StreamConversionOptions { use_ts_event_for_ts_init: true, .. };\n\n// after: require both columns up front\nfor col in [\"ts_event\", \"ts_init\"] {\n    assert!(batch.schema().column_with_name(col).is_some(),\n        \"missing required column: {col}\");\n}","handlingStrategy":"validation","validationCode":"assert!(batch.schema().column_with_name(\"ts_init\").is_some(),\n    \"stream batch lacks ts_init\");","typeGuard":"fn has_ts_init(batch: &RecordBatch) -> bool {\n    batch.schema().column_with_name(\"ts_init\").is_some()\n}","tryCatchPattern":"match apply_transforms(batches, use_ts_event_for_ts_init) {\n    Err(e) if e.to_string().contains(\"ts_init column not found\") => {\n        // add/derive ts_init or disable the substitution\n    }\n    r => r,\n}","preventionTips":["Verify both ts_event and ts_init exist before conversion","Write data only through NautilusTrader's standard encoders","Detect writer-version drift by validating schemas on ingest"],"tags":["arrow","schema","missing-column","data-conversion"],"backgroundTag":"schema-validation-failed","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}