diff --git a/src/starfile/parser.py b/src/starfile/parser.py index 567a885..4de697d 100644 --- a/src/starfile/parser.py +++ b/src/starfile/parser.py @@ -15,6 +15,11 @@ if TYPE_CHECKING: from os import PathLike +def _apply_numeric(col: pd.Series) -> pd.Series: + try: + return pd.to_numeric(col) + except ValueError: + return col class StarParser: filename: Path @@ -110,9 +115,9 @@ def _parse_loop_block(self) -> pd.DataFrame: comment='#', keep_default_na=False ) - df_numeric = df.apply(pd.to_numeric, errors='ignore') + df_numeric = df.apply(_apply_numeric) # Replace columns that are all NaN with the original string columns - df_numeric.loc[:, df_numeric.isna().all()] = df.loc[:, df_numeric.isna().all()] + df_numeric[df_numeric.columns[df_numeric.isna().all()]] = df[df_numeric.columns[df_numeric.isna().all()]] df = df_numeric df.columns = loop_column_names return df