Untitled
unknown
plain_text
10 months ago
3.7 kB
5
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