Untitled
unknown
plain_text
5 months ago
2.4 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 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' 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 df_filtered = df[ (df['zamowienie'].isin(['www nowe', 'mmp nowe'])) & (df['status'] == 'zbilingowany') & (df['Nazwa paczki'].str.contains('MVNO', na=False)) ] # Sprawdzenie czy filtr zwrócił dane if df_filtered.empty: print("Brak danych po filtracji.") return # Znalezienie 10 najczęściej występujących wartości w kolumnie "Nazwa paczki" top_10_packages = df_filtered['Nazwa paczki'].value_counts().nlargest(10).index # Grupowanie danych według daty i nazwy paczki, biorąc pod uwagę tylko top 10 nazw paczek grouped = df_filtered[df_filtered['Nazwa paczki'].isin(top_10_packages)].groupby(['Data', 'Nazwa paczki']).size().unstack(fill_value=0) # Przygotowanie końcowego DataFrame z 10 najczęściej występującymi nazwami paczek result = pd.DataFrame(grouped).reset_index() # Zamiana formatu DataFrame, aby pokazać ilości rekordów pod nazwami paczek result = result.melt(id_vars=['Data'], var_name='Package', value_name='Count') result = result.pivot(index='Data', columns='Package', values='Count').fillna(0).astype(int).reset_index() # Zmiana kolejności kolumn, Data złożenia jest zawsze pierwsza columns_order = ['Data'] + list(top_10_packages) result = result[['Data'] + [package for package in top_10_packages if package in result.columns]] # Zapisanie przetworzonego pliku Excel result.to_excel(output_path, index=False) # Przykład użycia process_csv('input.csv', 'output.xlsx')
Editor is loading...
Leave a Comment