from pathlib import Path import pandas as pd def safe_outer_merge_on_index(left: pd.DataFrame, right: pd.DataFrame) -> pd.DataFrame: if left.empty: return right elif right.empty: return left else: return pd.merge( left, right, how="outer", left_index=True, right_index=True, validate="one_to_one", ) def to_csv_with_settings( df: pd.DataFrame, folder: Path, filename_prefix: str, data_type: str ) -> None: full_path = construct_full_path(folder, filename_prefix, data_type) df.to_csv( path_or_buf=full_path, sep=",", na_rep="NA", header=True, index=True, encoding="utf-8", ) print("Exported the dataframe to " + str(full_path)) def read_csv_with_settings( folder: Path, filename_prefix: str, data_type: str, grouping_variable: list ) -> pd.DataFrame: full_path = construct_full_path(folder, filename_prefix, data_type) return pd.read_csv( filepath_or_buffer=full_path, sep=",", header=0, na_values="NA", encoding="utf-8", index_col=(["participant_id"] + grouping_variable), parse_dates=True, infer_datetime_format=True, cache_dates=True, ) def construct_full_path(folder: Path, filename_prefix: str, data_type: str) -> Path: export_filename = filename_prefix + "_" + data_type + ".csv" full_path = folder / export_filename return full_path