diff --git a/saqc/core/reader.py b/saqc/core/reader.py
index 4a3a4fb3a5d6ff9ba3554d582031521dab695916..5dba2d2d987d183e26e140f61775657fc61a4e60 100644
--- a/saqc/core/reader.py
+++ b/saqc/core/reader.py
@@ -60,11 +60,14 @@ def _castRow(row: Dict[str, str]) -> Dict[str, Any]:
     cast values to the data type given in 'types'
     """
     out = {}
-    for k, v in row.items():
+    keys = pd.Index(row.keys())
+    for k, func in CONFIG_TYPES.items():
+        key = keys[keys.str.match(k)][0]
+        value = row[key]
         try:
-            out[k] = CONFIG_TYPES[k](v)
+            out[key] = func(value)
         except:
-            _raise(row, ValueError, f"invalid value: v")
+            _raise(row, ValueError, f"invalid value: '{value}'")
     return out