From f61455475503a0cac17d5e69024495ad2bc0434c Mon Sep 17 00:00:00 2001 From: Evan8456 Date: Fri, 7 Feb 2025 10:07:32 -0500 Subject: [PATCH] Ensure that previous redcap csvs still work with prepare-bids --- src/b2aiprep/prepare/bids.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/b2aiprep/prepare/bids.py b/src/b2aiprep/prepare/bids.py index f1d778d..acdd963 100644 --- a/src/b2aiprep/prepare/bids.py +++ b/src/b2aiprep/prepare/bids.py @@ -142,6 +142,25 @@ def load_redcap_csv(file_path): return None +def insert_missing_columns(df: DataFrame) -> DataFrame: + """ + Adds any missing columns to the dataframe. + + Parameters + ---------- + df: DataFrame + The DataFrame to update. + + """ + all_columns_path = files("b2aiprep").joinpath("prepare", "resources", "all_columns.json") + all_columns = json.load(all_columns_path.open()) + columns_to_add = [col for col in all_columns if col not in df.columns] + for column in columns_to_add: + df[column] = np.nan + + return df + + def validate_redcap_df_column_names(df: DataFrame) -> DataFrame: """RedCap allows two distinct export formats: raw data or with labels. The raw data format exports column names as coded entries, e.g. "record_id". @@ -662,6 +681,9 @@ def redcap_to_bids( # manual step has been done here. validate_redcap_df_column_names(df) + # ensures that no columns are missing in the dataframe + df = insert_missing_columns(df) + construct_tsv_from_json( # construct participants.tsv df=df, json_file_path=os.path.join(outdir, "participants.json"),