Untitled
unknown
plain_text
10 months ago
2.7 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 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')
Editor is loading...
Leave a Comment