Ich hoffe, Ihr Gehirn auf Optimierung zu holen. Ich lerne immer noch mehr über Python und benutze es für meine tägliche Operations-Analysten-Position. Eine der Aufgaben, die ich habe, ist das Durchsuchen von ca. 60.000 eindeutigen Datensatz-Identifikatoren und das Durchsuchen eines anderen Datenrahmens mit ca. 120.000 Aufzeichnungen von Interaktionen, des Mitarbeiters, der die Interaktion verfasst hat, und der Zeit, zu der es passiert ist.Pandas - übereinstimmende Referenznummer zu finden, frühestes Datum
als Referenz, die beiden Datenrahmen an dieser Stelle wie folgt aussehen:
main_data = Unique Identifier Nur nok_data = Authored nach Namen, einzigartiger Identifer (bekannt als Fall Identifier Datei), Bemerkung Text, Erstellt am.
Mein Setup läuft derzeit ungefähr bei der Sortierung durch und vergleicht meine Daten mit 2500 Zeilen pro Minute, also etwa 25-30 Minuten oder so für einen Lauf. Was ich neugierig bin, ist gibt es irgendwelche Schritte, die ich durchgeführt, die:
- Redundante und ineffiziente Gesamt meinen Prozess
- Eine schlechte Verwendung von Syntax Verlangsamung um meinen Mangel an Wissen zu arbeiten.
Unten ist mein Code:
nok_data = pd.read_csv("raw nok data.csv") #Data set from warehouse
main_data = pd.read_csv("exampledata.csv") #Data set taken from iTx ids from referral view
row_count = 0
error_count = 0
print(nok_data.columns.values.tolist())
print(main_data.columns.values.tolist()) #Commented out, used to grab header titles if needed.
data_length = len(main_data) #used for counting how many records left.
earliest_nok = {}
nok_data["Created On"] = pd.to_datetime(nok_data["Created On"]) #convert all dates to datetime at beginning.
for row in main_data["iTx Case ID"]:
list_data = []
nok = nok_data["Case File Identifier"] == row
matching_dates = nok_data[["Created On", "Authored By Name"]][nok == True] #takes created on date only if nok shows row was true
if len(matching_dates) > 0:
try:
min_dates = matching_dates.min(axis=0)
earliest_nok[row] = [min_dates[0], min_dates[1]]
except ValueError:
error_count += 1
earliest_nok[row] = None
row_count += 1
print("{} out of {} records").format(row_count, data_length)
with open('finaloutput.csv','wb') as csv_file:
writer = csv.writer(csv_file)
for key, value in earliest_nok.items():
writer.writerow([key, value])
der Suche nach jeder Beratung oder Know-how von jener Durchführung Code wie diesen viel länger dann habe ich. Ich schätze all diejenigen, die sich nur die Zeit genommen haben, dies zu lesen. Glücklicher Dienstag,
Andy M.
**** EDIT abgefragten Daten ZEIGEN Sorry für meine Anfänger bewegen sich nicht jeder Datentyp einschließlich.
main_data Beispiel
ITX Case ID
2017-023597
2017-023594
2017-023592
2017-023590
nok_data aka "raw nok data.csv"
Authored By: Case File Identifier: Note Text: Authored on
John Doe 2017-023594 Random Text 4/1/2017 13:24:35
John Doe 2017-023594 Random Text 4/1/2017 13:11:20
Jane Doe 2017-023590 Random Text 4/3/2017 09:32:00
Jane Doe 2017-023590 Random Text 4/3/2017 07:43:23
Jane Doe 2017-023590 Random Text 4/3/2017 7:41:00
John Doe 2017-023592 Random Text 4/5/2017 23:32:35
John Doe 2017-023592 Random Text 4/6/2017 00:00:35
Sie sollten einige Beispieldaten [MCVE] veröffentlichen. Der erste Blick ist, dass das Iterieren nach Zeilen sehr langsam ist. – Alexander
Können Sie einige Dummy-Daten für 'main_data' und' nok_data' bereitstellen? –
Hallo @Alexander Ich habe ein paar Zeilen von Basisdaten für jeden hinzugefügt. –