Untitled
unknown
plain_text
4 months ago
3.7 kB
4
Indexable
def process_files(self): file_dates = self.generate_weekdays() concatenated_data = [] processed_files_count = 0 not_matching_files = [] current_date = self.start_date while processed_files_count < self.days_to_process: if len(file_dates) == 0: # Generar días adicionales para rellenar el déficit while len(file_dates) < self.days_to_process - processed_files_count: current_date -= timedelta(days=1) if current_date.weekday() < 5: # Lunes a Viernes file_dates.append(current_date.strftime("%Y%m%d")) file_date = file_dates.pop(0) matching_files = [f for f in os.listdir(self.input_folder) if file_date in f] if matching_files: for file in matching_files: file_path = os.path.join(self.input_folder, file) # Leer el fichero como CSV df = pd.read_csv(file_path, sep='\t', engine='python') # Calcular el número de escenario con 3 decimales scenario_number = f"{self.scenario_number_start - (processed_files_count * 0.001):.3f}" # Seleccionar y renombrar las columnas según las equivalencias processed_data = df.assign( **{ 'Scenario Number': scenario_number, 'Instrument Label': df['DISPLAYED'], 'Market Label': df['MARKET'], 'Maturity Label': '', 'Quotation Mode': 'YIELD', 'Shift Type': 'Std', 'Shift Value': df['YIELD'], 'Initial Value': '', 'Router': '' } ) # Seleccionar solo las columnas necesarias processed_data = processed_data[[ 'Scenario Number', 'Instrument Label', 'Market Label', 'Maturity Label', 'Quotation Mode', 'Shift Type', 'Shift Value', 'Initial Value', 'Router' ]] concatenated_data.append(processed_data) processed_files_count += 1 else: not_matching_files.append(file_date) print(f"No se encontró archivo para la fecha: {file_date}. Verificar si es festivo.") # Unir todos los datos procesados final_df = pd.concat(concatenated_data, ignore_index=True) # Asegurarse de que cada "Instrument Label" tenga 521 registros completed_data = [] for instrument_label, group in final_df.groupby('Instrument Label'): if len(group) < self.days_to_process: # Ordenar por fecha (u otra columna si es necesario) group = group.sort_values(by='Scenario Number') # Repetir la fila más antigua hasta completar 521 registros missing_count = self.days_to_process - len(group) oldest_row = group.iloc[0] repeated_rows = pd.DataFrame([oldest_row] * missing_count) group = pd.concat([group, repeated_rows], ignore_index=True) completed_data.append(group) # Combinar todos los datos en un DataFrame final final_df = pd.concat(completed_data, ignore_index=True) # Imprimir resultados de depuración print(f"Archivos procesados correctamente: {processed_files_count}") print(f"Fechas sin archivos coincidentes: {len(not_matching_files)}") print(f"Fechas sin archivos coincidentes (detalles): {not_matching_files}") return final_df
Editor is loading...
Leave a Comment