Untitled
unknown
plain_text
a year ago
5.3 kB
5
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