2016-07-30 6 views
-1

Hier ist ein Ausschnitt aus meinem Code:Effiziente Verfahren für Daten in mehrere CSV-Dateien passend

for i,r1 in enumerate(Solution.values): 
    h1=ProjectedRevenue.index[i] 
    District_ID,Instrument_ID,Buy_or_not,Revenue=r1 
    listSol=[] 
    listSol.append(h1) 
    listSol.append(list(r1)[0]) 
    listSol.append(list(r1)[1]) 
    for j,r2 in enumerate(ProjectedRevenue.values): 
     h2=ProjectedRevenue.index[j] 
     if h2 == listSol[0]: 
      District_ID,Instrument_ID,Annual_Projected_Revenue= r2 
      listPR=list(r2) 
      if listSol[1] == listPR[1] & listSol[2] == listPR[2]: 
       if(listPR[2]>0): 
        #do stuff 
        continue 
       else: 
        #do stuff 
        continue 

ich etwas Hilfe zu diesem Code benötigen. Ich bin neu in Python, und ich muss Dateneinträge von mehreren CSV-Dateien suchen und vergleichen. Ich habe es gesehen, aber es ist nicht in der Lage, die Funktion zu erkennen. Also habe ich das gemacht, um Operationen über Pandas zu suchen und durchzuführen, aber das hat eine Komplexität von $ O (n^2) $ und ist sehr langsam. Irgendwelche Hilfe diesbezüglich?

BEARBEITEN: So verwende ich Pandas und Numpy im Code, um Daten zu manipulieren. Und um es klarer zu machen, muss ich eine Suche durchführen, so dass Elemente des gleichen Index in zwei verschiedenen Dateien übereinstimmen. Betrachten Sie das folgende Beispiel:

Solution.csv:

Hospital_ID,District_ID,Instrument_ID 
1,4,6 
2,5,4 
7,8,5 

ProjectedRevenue.csv:

Hospital_ID,District_ID,Instrument_ID 
9,3,5 
7,8,5 
1,2,6 

Also hier der gemeinsame Eintrag 7,8,5 in den beiden files.I ist wollen kenne den schnellsten Weg, um sie zu suchen und zu vergleichen.

UPDATE: Die vorherige Frage war über einen Syntaxfehler, der behoben wird.

+0

Ich weiß, dass der vorherige Fehler dumm war. Können Sie bitte Ihren Downvote entfernen? Das zieht keine qualitativen Antworten an. – Rohinb97

+0

können Sie Beispiel-CSVs und gewünschten/erwarteten Datensatz/CSV? – MaxU

+0

ist [das] (http://stackoverflow.com/a/38675126/5741205) was willst du? – MaxU

Antwort

1

versuchen, diesen vektorisiert Pandas Ansatz:

In [22]: fn1 = r'D:\temp\.data\38673647\Solution.csv' 

In [23]: fn2 = r'D:\temp\.data\38673647\ProjectedRevenue.csv' 

In [24]: df1 = pd.read_csv(fn1) 

In [25]: df2 = pd.read_csv(fn2) 

In [26]: df1 
Out[26]: 
    Hospital_ID District_ID Instrument_ID 
0   1   4    6 
1   2   5    4 
2   7   8    5 

In [27]: df2 
Out[27]: 
    Hospital_ID District_ID Instrument_ID 
0   9   3    5 
1   7   8    5 
2   1   2    6 

In [28]: pd.merge(df1, df2, on=df1.columns.tolist()) 
Out[28]: 
    Hospital_ID District_ID Instrument_ID 
0   7   8    5 
+0

Ich werde das sicher versuchen. Ich warte auf andere Antworten, bevor ich deine akzeptiere. – Rohinb97

+0

Ich habe die Methode versucht, aber es scheint langsam zu sein. – Rohinb97

+0

@ Rohinb97, eigentlich sollte es __much__ schneller im Vergleich zu Nested-Loop-Ansatz, vor allem auf größere Dateien – MaxU

0

Verwenden Sie : am Ende if überprüfen.

if h2 == listSol[0]: 
+0

Das war so dumm von mir. Ich werde das korrigieren. Vielen Dank. – Rohinb97

+0

Alles in Bezug auf den zweiten Teil? – Rohinb97

+1

Verwenden Pandas Modul für den zweiten Teil –

Verwandte Themen