{"record":{"id":"7e5137f9bcb97a0f","repo":"dotnet/machinelearning","slug":"strings-badcolumncast-formatted-with-column-datat-7e5137","errorCode":null,"errorMessage":"Strings.BadColumnCast (formatted with column.DataType, typeof(string))","messagePattern":"Strings\\.BadColumnCast \\(formatted with column\\.DataType, typeof\\(string\\)\\)","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.Data.Analysis/DataFrameColumnCollection.cs","lineNumber":257,"sourceCode":"\n            throw new ArgumentException(string.Format(Strings.BadColumnCast, column.DataType, typeof(DateTime)));\n        }\n\n        /// <summary>\n        /// Gets the <see cref=\"ArrowStringDataFrameColumn\"/> with the specified <paramref name=\"name\"/>.\n        /// </summary>\n        /// <param name=\"name\">The name of the column</param>\n        /// <returns><see cref=\"ArrowStringDataFrameColumn\"/>.</returns>\n        /// <exception cref=\"ArgumentException\">A column named <paramref name=\"name\"/> cannot be found, or if the column's type doesn't match.</exception>\n        public ArrowStringDataFrameColumn GetArrowStringColumn(string name)\n        {\n            DataFrameColumn column = this[name];\n            if (column is ArrowStringDataFrameColumn ret)\n            {\n                return ret;\n            }\n\n            throw new ArgumentException(string.Format(Strings.BadColumnCast, column.DataType, typeof(string)));\n        }\n\n        /// <summary>\n        /// Gets the <see cref=\"StringDataFrameColumn\"/> with the specified <paramref name=\"name\"/>.\n        /// </summary>\n        /// <param name=\"name\">The name of the column</param>\n        /// <returns><see cref=\"StringDataFrameColumn\"/>.</returns>\n        /// <exception cref=\"ArgumentException\">A column named <paramref name=\"name\"/> cannot be found, or if the column's type doesn't match.</exception>\n        public StringDataFrameColumn GetStringColumn(string name)\n        {\n            DataFrameColumn column = this[name];\n            if (column is StringDataFrameColumn ret)\n            {\n                return ret;\n            }\n\n            throw new ArgumentException(string.Format(Strings.BadColumnCast, column.DataType, typeof(string)));\n        }","sourceCodeStart":239,"sourceCodeEnd":275,"githubUrl":"https://github.com/dotnet/machinelearning/blob/7b76e69cf964daeca3f1377af6bc5543284d56c6/src/Microsoft.Data.Analysis/DataFrameColumnCollection.cs#L239-L275","documentation":"GetArrowStringColumn returns the named column as an ArrowStringDataFrameColumn or throws ArgumentException(Strings.BadColumnCast, column.DataType, typeof(string)) if it is a different column kind (commonly a StringDataFrameColumn).","triggerScenarios":"df.Columns.GetArrowStringColumn(\"s\") where the column is a StringDataFrameColumn or another non-arrow string storage.","commonSituations":"Columns built in memory as StringDataFrameColumn but fetched as ArrowString, data read from formats that map strings differently (CSV vs Arrow files).","solutions":["Check whether the column 'is ArrowStringDataFrameColumn' before calling.","If a StringDataFrameColumn is what you have, call GetStringColumn instead, or convert to ArrowStringDataFrameColumn.","Normalize string column storage at load time so accessors match."],"exampleFix":"// before\nvar s = df.Columns.GetArrowStringColumn(\"Name\"); // Name is StringDataFrameColumn\n// after\nvar s = df.Columns[\"Name\"] is ArrowStringDataFrameColumn arrow\n    ? arrow\n    : df.Columns.GetStringColumn(\"Name\");","handlingStrategy":"type-guard","validationCode":"var c = df.Columns[\"Name\"];\nvar s = c is ArrowStringDataFrameColumn\n    ? df.Columns.GetArrowStringColumn(\"Name\")\n    : throw new InvalidOperationException($\"'Name' is {c.DataType}, not arrow string\");","typeGuard":"bool IsArrowString(DataFrameColumn c) => c is ArrowStringDataFrameColumn;","tryCatchPattern":"try\n{\n    var s = df.Columns.GetArrowStringColumn(name);\n}\ncatch (ArgumentException)\n{\n    // fall back to GetStringColumn or convert storage\n}","preventionTips":["Know which ingestion path produces ArrowString vs String columns.","Normalize string column storage right after loading.","Use pattern matching instead of assuming string column kind."],"tags":["dataframe","bad-cast","type-mismatch","dotnet"],"backgroundTag":"type-mismatch","analyzedSha":"7b76e69cf964daeca3f1377af6bc5543284d56c6","analyzedAt":"2026-09-11T12:35:38.930Z","contentChangedAt":"2026-09-11T12:35:38.930Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}