Untitled
import pandas as pd def process_csv(file_path, output_path): # Wczytanie pliku CSV z odpowiednim kodowaniem i ignorowaniem błędnych linii df = pd.read_csv(file_path, encoding='ISO-8859-1', on_bad_lines='skip', delimiter=';') # Wyświetlenie dostępnych kolumn print("Available columns:", df.columns) # Sprawdzenie czy kolumna "Data złożenia" istnieje if 'Data' in df.columns: # Zmiana formatu daty w kolumnie "Data złożenia" df['Data'] = pd.to_datetime(df['Data'], format='%d-%m-%Y, %H:%M:%S').dt.date else: print("Kolumna 'Data złożenia' nie istnieje w pliku CSV.") return # Sprawdzanie czy wymagane kolumny istnieją required_columns = ['zamowienie', 'status', 'Nazwa paczki'] for col in required_columns: if col not in df.columns: print(f"Kolumna '{col}' nie istnieje w pliku CSV.") return # Filtrowanie danych - szukanie paczek zawierających "INT" df_filtered = df[ (df['zamowienie'].isin(['www nowe', 'mmp nowe'])) & (df['status'] == 'zbilingowany') & (df['Nazwa paczki'].str.contains('INT', na=False)) ].copy() # .copy() to avoid SettingWithCopyWarning # Funkcja do wyciągania prędkości przed znakiem "/" def extract_speed(name): if '/' in name: return name.split('/')[0] # Bierzemy tylko to, co jest przed "/" return name # Jeśli brak "/", zwracamy całą nazwę # Wyciąganie prędkości przed "/" df_filtered['Speed'] = df_filtered['Nazwa paczki'].apply(extract_speed) # Tworzenie kolumn na podstawie wyciągniętej prędkości df_filtered.loc[:, '300'] = df_filtered['Speed'].str.contains('300').astype(int) df_filtered.loc[:, '600'] = df_filtered['Speed'].str.contains('600').astype(int) df_filtered.loc[:, '900'] = df_filtered['Speed'].str.contains('900').astype(int) df_filtered.loc[:, '150'] = df_filtered['Speed'].str.contains('150').astype(int) df_filtered.loc[:, '450'] = df_filtered['Speed'].str.contains('450').astype(int) df_filtered.loc[:, '1,2'] = df_filtered['Speed'].str.contains('1,2').astype(int) # Sumowanie paczek według daty grouped = df_filtered.groupby('Data').agg({ '300': 'sum', '600': 'sum', '900': 'sum', '150': 'sum', '450': 'sum', '1,2': 'sum' }).reset_index() # Sprawdzenie czy grupowanie zwróciło dane if grouped.empty: print("Brak danych po grupowaniu.") return # Zapisanie przetworzonego pliku Excel grouped.to_excel(output_path, index=False) # Przykład użycia process_csv('input.csv', 'output.xlsx')
Leave a Comment