Vlookup με Python χωρίς τη χρήση Microsoft Excel functions
- Πώς συλλέγουμε to actual execution plan από τα queries με χρήση Extended Event και πως διαβάζουμε τα δεδομένα του - 2 Δεκέμβριος 2024
- Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle - 1 Νοέμβριος 2024
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
Το Microsoft Excel είναι πολύ αποδοτικό όταν διαχειρίζεται μικρό όγκο δεδομένων. Απαιτεί όμως τη χρήση functions οι οποίες είναι πολύ εύκολο να τροποποιηθούν κατά λάθος ή να ξεχάσουμε να τις αφαιρέσουμε πριν αποθηκεύσουμε το αποτέλεσμα.
Κάπου εκεί έρχεται η Python που με μερικές γραμμές κώδικα γίνεται να πραγματοποιήσει τις εργασίες που θέλουμε και να εξάγει τα δεδομένα σε αρχείο Excel.
Μια από τις ποιο χρήσιμες και χρησιμοποιούμενες functions είναι η function vlookup (vertical lookup). Η vlookup παρέχει διασύνδεση των σχέσεων μεταξύ διαφορετικών αρχείων Excel ή διαφορετικών φίλων στο Excel. Αυτή την ενέργεια μπορούμε να την κάνουμε εύκολα με την χρήση Python.
Πάμε να δούμε το πρόβλημα που θέλουμε να λύσουμε.
Έχουμε ένα αρχείο Excel με το σύνολο πωλήσεων με όνομα sales.xlsx.
Υπάρχει ένα δεύτερο αρχείο Excel με τα ονόματα των πελατών που ονομάζεται pelates.xlsx.
Θα θέλαμε στο αρχείο sales.xlsx να έχουμε και τα ονόματα των πελάτων, ας δούμε πως γίνεται αυτό.
Πέρα από το να έχουμε εγκαταστήσει την Python, θα χρειαστούμε τις κάτωθι βιβλιοθήκες που γίνονται εύκολα εγκατάσταση με μια εκτέλεση των κάτωθι εντολών στο command prompt.
pip install xlrd pip install pandas pip install numpy pip install openpyxl
Κάνουμε import τις βιβλιοθήκες
import pandas as pd import numpy as np
Γεμίζουμε 2 μεταβλητές dataframe με τις εγγραφές του κάθε Excel. Με την παράμετρο sheet_name μπορούμε να διαλέξουμε και το φύλο που βρίσκονται τα δεδομένα.
df_pelates = pd.read_excel(‘pelates.xlsx’,sheet_name=’Sheet1′) df_sales = pd.read_excel(‘sales.xlsx’,sheet_name=’Sheet1′)
Θα πρέπει να κάνουμε μετονομασία το πεδίο id σε customer_id, ώστε να έχει το ίδιο όνομα που έχει και στο dataframe των sales.
df_pelates.rename(columns={'id':'customer_id'}, inplace=True)
Σε αυτό το βήμα γίνεται ουσιαστικά το vlookup, ενώνουμε και τα 2 dataframes σε ένα καινούργιο (df_final) στο πεδίο customer_id. Στη παράμετρο how δηλώνουμε τον τρόπο που θα γίνει join όπως ισχύει και στην SQL έχουμε επιλογές left,right,outer,inner.
Με την επιλογή right δηλώνουμε ότι θέλουμε όλες τις εγγραφές από το δεύτερο dataframe, συνδέοντας με όσα συνδέονται με το πρώτο.
Αν δεν υπάρχει κοινό customer_id θα έχει την τιμή NaN/Null ή αλλιώς το κενό.
df_final = pd.merge(df_pelates, df_sales, on='customer_id', how='right')
Για να δούμε τα πεδία που έχει τώρα το ενωμένο dataframe.
print(df_final.columns)
Το αποτέλεσμα μέχρι στιγμής είναι αυτό.
print(df_final)
Στη περίπτωση που δεν υπάρχει ο πελάτης και δεν θέλουμε να μας έρθουν οι τιμές NaN στην θέση τους και απλά θέλουμε να έχουμε κενό κελί εκτελούμε το κάτωθι.
df_final = df_final.replace(np.nan, '', regex=True)
Μπορούμε επίσης να διαλέξουμε ποια πεδία από αυτά θα κρατήσουμε.
df_final = df_final[['onoma','epitheto','eidos','posotita','kostos']]
Το τελικό αποτέλεσμα
Και τέλος να εξάγουμε τα αποτελέσματα σε ένα καινούργιο excel.
df_final.to_excel('vlookuped.xlsx', index=False)
Nice!