Untitled
unknown
plain_text
5 months ago
5.3 kB
3
Indexable
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" istnieje if 'Data' in df.columns: # Zmiana formatu daty w kolumnie "Data" df['Data'] = pd.to_datetime(df['Data'], format='%d-%m-%Y, %H:%M:%S').dt.date else: print("Kolumna 'Data' nie istnieje w pliku CSV.") return # Sprawdzanie czy wymagane kolumny istnieją required_columns = ['zamowienie', 'status', 'Nazwa paczki', 'miejscowosc', 'krok'] for col in required_columns: if col not in df.columns: print(f"Kolumna '{col}' nie istnieje w pliku CSV.") return # Filtrowanie danych w kolumnie "zamowienie" df_filtered = df[ (df['zamowienie'].isin(['www nowe', 'mmp nowe'])) & (df['status'].str.lower().str.startswith('nieuko')) & # Szuka wartości zaczynających się od "nieuko" ( df['Nazwa paczki'].str.contains('INT', na=False) | df['Nazwa paczki'].str.contains('K Vectra', na=False) | df['Nazwa paczki'].str.contains('K Int Mobi', na=False) | df['Nazwa paczki'].str.contains('MVNO', na=False) | (df['Nazwa paczki'].str.contains('DTV', na=False) & ~df['Nazwa paczki'].str.contains('INT', na=False)) ) ] # Sprawdzenie czy filtr zwrócił dane if df_filtered.empty: print("Brak danych po filtracji.") return # Znalezienie wartości paczek w każdej kategorii category_conditions = { 'INT': df_filtered['Nazwa paczki'].str.contains('INT', na=False), 'K Vectra': df_filtered['Nazwa paczki'].str.contains('K Vectra', na=False), 'K Int Mobi': df_filtered['Nazwa paczki'].str.contains('K Int Mobi', na=False), 'MVNO': df_filtered['Nazwa paczki'].str.contains('MVNO', na=False), 'DTV (bez INT)': df_filtered['Nazwa paczki'].str.contains('DTV', na=False) & ~df_filtered['Nazwa paczki'].str.contains('INT', na=False) } # Przygotowanie tabeli wynikowej z liczbą powtórzeń dla każdej kategorii result_data = [] detailed_data = {} location_data = {} krok_data = {} for category, condition in category_conditions.items(): # Zliczanie liczby powtórzeń dla każdej paczki w kategorii category_df = df_filtered[condition] category_count = category_df.shape[0] result_data.append({'Kategoria': category, 'Liczba powtórzeń': category_count}) # Zliczanie powtórzeń dla każdej unikalnej "Nazwa paczki" detailed_counts = category_df['Nazwa paczki'].value_counts() detailed_data[category] = detailed_counts.reset_index() detailed_data[category].columns = ['Nazwa paczki', 'Liczba powtórzeń'] # Zliczanie liczby wystąpień dla każdej miejscowości per produkt location_counts = category_df['miejscowosc'].value_counts() location_data[category] = location_counts.reset_index() location_data[category].columns = ['Miejscowosc', 'Liczba powtórzeń'] # Filtr w kolumnie "krok" krok_condition = ( category_df['krok'].str.contains('weryfikacja/podawanie danych', na=False) | category_df['krok'].str.contains('podsumowanie', na=False) | category_df['krok'].str.startswith('um', na=False) # Szukanie kroków zaczynających się od "um" ) krok_counts = category_df[krok_condition]['krok'].value_counts() krok_data[category] = krok_counts.reset_index() krok_data[category].columns = ['Krok', 'Liczba powtórzeń'] # Konwersja do DataFrame result_df = pd.DataFrame(result_data) # Zapisanie do Excela za pomocą 'openpyxl' with pd.ExcelWriter(output_path, engine='openpyxl') as writer: # Zapisanie ogólnego podsumowania result_df.to_excel(writer, sheet_name='Podsumowanie', index=False) # Zapisanie szczegółowych danych dla każdej kategorii w osobnych arkuszach for category, data in detailed_data.items(): data.to_excel(writer, sheet_name=category, index=False) # Zapisanie danych miejscowości w nowym arkuszu for category, location_df in location_data.items(): location_df.to_excel(writer, sheet_name=f'{category}_Miejscowosci', index=False) # Dodanie danych z kolumny "krok" do zakładki "Podsumowanie" pod istniejącą tabelą worksheet = writer.sheets['Podsumowanie'] start_row = result_df.shape[0] + 3 # Po istniejącej tabeli, z odstępem 3 wierszy # Zapisujemy dane z "krok" dla każdej kategorii osobno for category, krok_df in krok_data.items(): worksheet.cell(start_row, 1, f"Kategoria: {category}") # Nazwa kategorii krok_df.to_excel(writer, sheet_name='Podsumowanie', startrow=start_row + 1, index=False, header=True) start_row += krok_df.shape[0] + 3 # Zwiększamy wiersz dla kolejnych kategorii print(f"Plik został zapisany jako {output_path}") # Przykład użycia process_csv('input.csv', 'output.xlsx')
Editor is loading...
Leave a Comment