58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
|
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
|