Προς το περιεχόμενο

Εισαγωγή csv μόνο νέες εγγραφές


Spect~

Προτεινόμενες αναρτήσεις

2 ώρες πριν, masteripper είπε

Μιας και πιάσαμε την Python

import pandas as pd
import openpyxl

df_source = pd.read_excel("C:\\Temp\Book1.xlsx")
df_csv = pd.read_csv("C:\\Temp\Book2.csv")
df_result =pd.concat([df_source,df_csv]).drop_duplicates(['ID'], keep='last').sort_values(by=['ID']).reset_index(drop=True)
df_result.to_excel("C:\\Temp\Final.xlsx")

και για να μην μπλέκουμε με θεωρητικές εικασίες ... :)

Σωστος. Μιας και θελει να κρατησει τις υφισταμενες γραμμες στο Excel, ίσως καλυτερα keep = 'first', ειδικα αν υπάρχουν διαφορές σε άλλες στήλες πέραν της ID

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 30
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

3 λεπτά πριν, archer100 είπε

Σωστος. Μιας και θελει να κρατησει τις υφισταμενες γραμμες στο Excel, ίσως καλυτερα keep = 'first', ειδικα αν υπάρχουν διαφορές σε άλλες στήλες πέραν της ID

Δεν είναι «καλύτερα». Μιας και θέλει να κρατήσει τις υφιστάμενες εγγραφές, πρέπει να έχει “first” αλλιώς είναι λάθος. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

10 λεπτά πριν, DrKo είπε

Δεν είναι «καλύτερα». Μιας και θέλει να κρατήσει τις υφιστάμενες εγγραφές, πρέπει να έχει “first” αλλιώς είναι λάθος. 

Εαν οι νεες γραμμες ειναι ταυτοσημες με τις υφισταμενες δεν εχει σημασια, αν υπαρχει εστω και μια διαφορα σε αλλη στηλη ναι τοτε υποχρεωτικα keep = 'first' αλλιως ειναι λαθος. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

5 λεπτά πριν, archer100 είπε

Εαν οι νεες γραμμες ειναι ταυτοσημες με τις υφισταμενες δεν εχει σημασια, αν υπαρχει εστω και μια διαφορα σε αλλη στηλη ναι τοτε υποχρεωτικα keep = 'first' αλλιως ειναι λαθος. 

Ναι, εάν είναι ταυτόσημες δεν έχει καμία σημασία και μπορεί να μείνει στην default τιμή (η οποία είναι “first” ). Και ναι, εάν υπάρχει έστω και μία διαφορά, το “last” είναι λάθος.

Βάσει του τι γράφτηκε στο αρχικό post, η σωστή τιμή είναι “first”. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators
19 ώρες πριν, masteripper είπε

Μιας και πιάσαμε την Python

import pandas as pd
import openpyxl

df_source = pd.read_excel("C:\\Temp\Book1.xlsx")
df_csv = pd.read_csv("C:\\Temp\Book2.csv")
df_result =pd.concat([df_source,df_csv]).drop_duplicates(['ID'], keep='last').sort_values(by=['ID']).reset_index(drop=True)
df_result.to_excel("C:\\Temp\Final.xlsx")

και για να μην μπλέκουμε με θεωρητικές εικασίες ... :)

Αν εξαιρέσεις οτι θελει συγκεκριμένη εκδοση openpyxl γιατι η μετα την 1.2.0 αν θυμαμαι καλα δεν υποστηριζει xlsx αρχεια (η τουλαχιστον πρεπει να το ανοιξεις με διαφορετικο τροπο) το μονο θεμα ειναι οτι ανοιγεις διαφορετικο εξελ απο το τελικο. Δηλαδη χρειαζεται source και result να ειναι το ιδιο. οπου φανταζομαι δεν υπαρχει θεμα αν το αλλαξω αλλα δεν ειχα χρονο να ασχοληθω παραπανω

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

34 λεπτά πριν, Spect~ είπε

Αν εξαιρέσεις οτι θελει συγκεκριμένη εκδοση openpyxl γιατι η μετα την 1.2.0 αν θυμαμαι καλα δεν υποστηριζει xlsx αρχεια (η τουλαχιστον πρεπει να το ανοιξεις με διαφορετικο τροπο) το μονο θεμα ειναι οτι ανοιγεις διαφορετικο εξελ απο το τελικο. Δηλαδη χρειαζεται source και result να ειναι το ιδιο. οπου φανταζομαι δεν υπαρχει θεμα αν το αλλαξω αλλα δεν ειχα χρονο να ασχοληθω παραπανω

Δεν το πολυεψαξα...ότι έβγαλε το Pycharm

image.png.a55825cc347ef409fcb67e1bea23d987.png

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators

Το γυρισα στην access αλλα ειμαι πολυ κοντα στο να το σπασω.. 

Ο πινακας που εχω ειναι αυτος

Spoiler

1.PNG.5850a599d30f115e072bc9cd085bb4ae.PNG

Το csv εχει τη  μορφη αυτη

Spoiler

2.PNG.dac180ba9293f585040adb21f52c542e.PNG

Οταν προσπαθω να φτιαξω το import για να συνδεσω το csv με τον πινακα μου παω στο advanced - specs επιλεγω ποιες στηλες θελω αλλα εχω 2 θεματα. Περα οτι εμφανιζει 2 στηλες unnamed που δεν ξερω απο που προερχονται μου το βγαζει ετσι:

 

Spoiler

3.PNG.51574287edf0c760e51ae19d889a176e.PNG4.PNG.32985ab6e7a0d2b96fc4287fc10f3490.PNG

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις 19/5/2022 στις 3:07 ΜΜ, Spect~ είπε

Περα οτι εμφανιζει 2 στηλες unnamed που δεν ξερω απο που προερχονται μου το βγαζει ετσι:

Δε φτάνει που δε μας λες τι ονόματα έχουν οι στήλες του csv που η Access μετονομάζει σε Unnamed: #, δεν τ’ αφήνεις να φανούν και στις εικόνες!...

Anyway…

Πιθανότατα στο csv υπάρχουν ονόματα πεδίων που για την Accces αποτελούν δεσμευμένες λέξεις (πχ Name, Date κτλ) γι' αυτό και τα μετονομάζει.

Τράβα τα δεδομένα από το csv όπως είναι χύμα σε έναν πρόχειρο πίνακα και μ’ ένα ερώτημα μετέφερε τα πεδία και τις εγγραφές που θέλεις στον κανονικό.

Tip: Εφόσον έχεις το StartDate και το EndDate, το πεδίο Nights είναι περιττό.

Στο πεδίο DateBooked, νομισματική τιμή σε € είναι αυτή που κρύβεις;

Αν δεν το έχεις φτιάξει ακόμα, ανέβασε εδώ το csv με μια γραμμή με fake στοιχεία και την Access να το δούμε.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators
10 ώρες πριν, MastroGiannis είπε

Δε φτάνει που δε μας λες τι ονόματα έχουν οι στήλες του csv που η Access μετονομάζει σε Unnamed: #, δεν τ’ αφήνεις να φανούν και στις εικόνες!...

 

H Δευτερη φωτογραφια ειναι το csv. 1η γραμμη τα ονοματα 2η γραμμη μια εγγραφη! 

10 ώρες πριν, MastroGiannis είπε

Εφόσον έχεις το StartDate και το EndDate, το πεδίο Nights είναι περιττό.

Το ξερω αλλα γιατι να κανω υπολογισμους αφου υπαρχει ετοιμο :P;

10 ώρες πριν, MastroGiannis είπε

Στο πεδίο DateBooked, νομισματική τιμή σε € είναι αυτή που κρύβεις;

 

Ναι. Για καποιο λόγω μου μπερδευει το earnings με το listings. Ακομη και σειρα στον πινακα που αλλαξα παλι το ιδιο κανει.

Τελικα το εκανα αλλιως γιατι ειχα θεμα με τις ημερομηνιες και δουλευει κανονικα τωρα. Ουσιαστικα Χωρισα σε 2 πινακες καποιες τιμες. Ο ενας πχ εχει ολες τις λεπτομερειες τις κρατησεις μαζι με την αξια και ο αλλος εχει την ημερομηνια που εγινε η κρατηση (datebooked), confirmation code για να υπαρχει συνδεση με τον αλλο πινακα (κοινο στοιχειο) και το ονομα του καταλλυματος αν θυμαμαι καλα). Απλα τρεχω 2 import την φορα αλλα μικρο το κακο μιας και ειναι αποθηκευμενα και ξοδευω 10" παραπανω.

Τωρα εχω "θεματα" με τα reports που θελω να βγαζω αλλα δεν εχω και χρονο να κατσω να ασχοληθω. Για παραδειγμα θελω ενα query που να μου βγαζει τα εσοδα ανα μηνα.

Το query δουλευει (χρησιμοποιω την συναρτηση Month(StartDate)) αλλα θελω να το κανω για ολους τους μηνες και οχι ενα query για καθε μηνα. Επισης θα πρεπει να λαβω υποψη μου και το χρονο τωρα που το σκεφτομαι! :P
Δεν ξερω αν στην access υπαρχει τροπος να φτιαξεις κατι σαν φορμα για να οριζεις εσυ καποιες τιμες πχ περιοδο που θες και να εκτελει το query συμφωνα με αυτο

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

3 ώρες πριν, Spect~ είπε

H Δευτερη φωτογραφια ειναι το csv. 1η γραμμη τα ονοματα 2η γραμμη μια εγγραφη! 

Εννοούσα να ανεβάσεις το αρχείο .csv με ψευδή στοιχεία, για να το δοκιμάσουμε με όλα τα πεδία του, και όχι την εικόνα του, στην οποία μάλιστα δεν φαίνεται το πεδίο που μετονομάστηκε σε Unnnamed: 13!

3 ώρες πριν, Spect~ είπε

Το ξερω αλλα γιατι να κανω υπολογισμους αφου υπαρχει ετοιμο :P;

Διότι οι υπολογισμοί γίνονται από τη μηχανή, κι όχι από εσένα (ευτυχώς για όλους μας), και μάλιστα σε ένα μόνο σημείο: στο πρώτο query μέσω του οποίου θα τραβάς πάντα τις πληροφορίες από τον πίνακα (και όχι άμεσα από αυτόν), ενώ η μέριμνα της ενημέρωσης του πεδίου Nights, σε κάθε ενημέρωση των άλλων δυο, είναι δική σου.

Γενικώς, υπολογισμένες τιμές δεν αποθηκεύουμε σε πίνακες (εκτός εξαιρετικών περιπτώσεων – και η προκείμενη δεν είναι τέτοια).

3 ώρες πριν, Spect~ είπε

Το query δουλευει (χρησιμοποιω την συναρτηση Month(StartDate)) αλλα θελω να το κανω για ολους τους μηνες και οχι ενα query για καθε μηνα. Επισης θα πρεπει να λαβω υποψη μου και το χρονο τωρα που το σκεφτομαι!

Φτιάξε το πρώτο (βασικό) ερώτημα:

SELECT r.*,  Year(r.[StartDate]) AS ResYear, Month(r.[StartDate]) AS ResMonth
FROM Reservation AS r;

αποθήκευσέ το ως qryReservations.

Φτιάξε το ερώτημα συνόλων ανά έτος και μήνα:

SELECT qr.ResYear, qr.ResMonth, Sum(qr.[Earnings]) AS ResTotal
FROM qryReservations AS qr 
GROUP BY qr.ResYear, qr.ResMonth;

(προσθέτεις κι άλλα πεδία, όπως Count κρατήσεων κτλ)

Βασίζεις τις αναφορές συνόλων στο παραπάνω ερώτημα κι εφαρμόζεις φίλτρα του τύπου: "(ResYear=2022) AND (ResMonth In (4,5,6))"

Για παράδειγμα, από τη φόρμα ανοίγεις την αναφορά συνόλων με κώδικα όπως τον παρακάτω:

DoCmd.OpenReport "rptResTotals", acViewPreview, , "ResYear=" & Me.txtYear & " AND ResMonth IN(" & Me.txtMonths & ")"

Όπου txtYear και txtMonths, τα πεδία αναζήτησης "Έτος" και "Μήνες" στη φόρμα.

Κατά το άνοιγμα της πρώτης φόρμας της εφαρμογής, μπορούν να τρέχουν αυτόματα τα αποθηκευμένα imports ως εξής:

Private Sub Form_Open(Cancel As Integer)
    DoCmd.RunSavedImportExport "MySavedImportCSV1"
    DoCmd.RunSavedImportExport "MySavedImportCSV2"
End Sub

(αν και δεν εγκρίνω τη λύση με τους διπλούς πίνακες)

Οπότε γλιτώνεις και τα 10". ;)

 
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators
2 λεπτά πριν, MastroGiannis είπε

Διότι οι υπολογισμοί γίνονται από τη μηχανή, κι όχι από εσένα (ευτυχώς για όλους μας), και μάλιστα σε ένα μόνο σημείο: στο πρώτο query μέσω του οποίου θα τραβάς πάντα τις πληροφορίες από τον πίνακα (και όχι άμεσα από αυτόν), ενώ η μέριμνα της ενημέρωσης του πεδίου Nights, σε κάθε ενημέρωση των άλλων δυο, είναι δική σου.

Γενικώς, υπολογισμένες τιμές δεν αποθηκεύουμε σε πίνακες (εκτός εξαιρετικών περιπτώσεων – και η προκείμενη δεν είναι τέτοια).

Ειναι πληροφορια που υπαρχει στο csv ετσι και αλλιως...

 

5 λεπτά πριν, MastroGiannis είπε

Φτιάξε το πρώτο (βασικό) ερώτημα:

 

Το βασικο το χω φτιαξει αν και δεν θυμαμαι πως ακριβως φανταζομαι ηταν κατι αντιστοιχο.

5 λεπτά πριν, MastroGiannis είπε

(αν και δεν εγκρίνω τη λύση με τους διπλούς πίνακες)

Ηταν πιο ευκολη απο το να μου σπασουν τα νευρα για να βρω που γινεται η μαλακια.  Εππισης το κανω για μενα και ο ογκος δεν θα ναι και τιποτα τρελο. Να χει 50;70 κρατησεις το χρονο; Τελος, το πεδιο που εχω στον εξτρα πινακα δεν ειναι κατι που χρειαζεται γενικοτερα απλα για στατιστικους λογους οποτε μικρο το κακο. Παρολα αυτα θα ανεβασω μετα

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

3 λεπτά πριν, Spect~ είπε

Ειναι πληροφορια που υπαρχει στο csv ετσι και αλλιως...

Δεν την εισάγεις καν, και στο βασικό ερώτημα φτιάχνεις το Nights ως εξής: [EndDate]-[StartDate] AS [Nights]

Στο csv μπορεί να υπάρχει αλλά σε πίνακα της βάσης από την οποία βγαίνει δε νομίζω. Και το csv αποτέλεσμα ερωτήματος είναι.

6 λεπτά πριν, Spect~ είπε

Ηταν πιο ευκολη απο το να μου σπασουν τα νευρα για να βρω που γινεται η μαλακια.

Σου είπα: Εισάγεις το csv ως έχει σε έναν πρόχειρο πίνακα και μεταφέρεις με Append Query στον πίνακα Reservation ό,τι θέλεις και όπως θέλεις (εννοείται αυτόματα).

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators
1 λεπτό πριν, MastroGiannis είπε

Στο csv μπορεί να υπάρχει αλλά σε πίνακα της βάσης από την οποία βγαίνει δε νομίζω. Και το csv αποτέλεσμα ερωτήματος είναι.

19 λεπτά πριν, Spect~ είπε

Του airbnb στην οποια σιγουρα δεν εχω προσβαση ! :P 

1 λεπτό πριν, MastroGiannis είπε

Σου είπα: Εισάγεις το csv ως έχει σε έναν πρόχειρο πίνακα και μεταφέρεις με Append Query στον πίνακα Reservation ό,τι θέλεις και όπως θέλεις (εννοείται αυτόματα).

 

Αυτο αν ξερεις να το κανεις.. Αν μου πεις σε MS Access πως μπορω να το κανω ευχαριστως να το κανω ετσι!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...