Untitled

 avatar
unknown
plain_text
a month ago
2.7 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 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