Source code for pybtls.output.read.time_history

import pandas as pd
from pathlib import Path
from collections import defaultdict

__all__ = ["read_TH"]


[docs] def read_TH(file_path: Path, no_lines: int = None, start_line: int = 1) -> pd.DataFrame: """ Read the time history data from pybtls results.\n Warning: This could blow up the computer memory.\n Do set a no_lines to partially read the data.\n This output file has a header. Parameters ---------- file_path : Path\n The path to the time history data file.\n no_lines : int, optional\n The number of data lines to read from the file.\n If not specified, all lines will be read.\n start_line : int, optional\n Default is 1. \n The line to start reading data from. Returns ------- pd.DataFrame\n The time history data. """ # Read data return_data = pd.read_csv( file_path, sep="[\s\t]+", header=None, skiprows=max(1, start_line), nrows=no_lines, engine="python", ) no_effects = len(return_data.columns) - 2 # Set column ids column_ids = ["Time", "No. Trucks"] + [f"Effect {i + 1}" for i in range(no_effects)] return_data.columns = column_ids # # Fill the data (if use, remove the corresponding part in plot/time_history.py) # time_step = return_data["Time"].iloc[1] - return_data["Time"].iloc[0] # column_names = return_data.columns.tolist()[2:] # data_time = [] # data_no_trucks = [] # data_val = defaultdict(list) # for i in range(len(return_data["Time"]) - 1): # data_time.append(return_data["Time"].iloc[i]) # data_no_trucks.append(return_data["No. Trucks"].iloc[i]) # for name in column_names: # data_val[name].append(return_data[name].iloc[i]) # time_diff = return_data["Time"].iloc[i + 1] - return_data["Time"].iloc[i] # if (time_diff - time_step) > 1e-6: # data_time.append(return_data["Time"].iloc[i] + time_step) # data_no_trucks.append(0) # for name in column_names: # data_val[name].append(0.0) # data_time.append(return_data["Time"].iloc[-1]) # data_no_trucks.append(return_data["No. Trucks"].iloc[-1]) # for name in column_names: # data_val[name].append(return_data[name].iloc[-1]) # return_data["Time"] = pd.Series(data_time) # return_data["No. Trucks"] = pd.Series(data_no_trucks) # for name in column_names: # return_data[name] = pd.Series(data_val[name]) return return_data