Pandas DataFrame.merge MemoryError

Ziel

Mein Ziel ist es, Zusammenführen von zwei DataFrames durch Ihre gemeinsame Spalte (gen-Namen), so kann ich ein Produkt jedes gen score über jedes gen Reihe. Ich würde dann einen groupby auf Patienten und Zellen und der Summe aller Punktzahlen von jedem. Die ultimative Daten-frame sollte dann so Aussehen:

    patient  cell 
    Pat_1    22RV1    12
             DU145    15
             LN18      9
    Pat_2    22RV1    12
             DU145    15
             LN18      9
    Pat_3    22RV1    12
             DU145    15
             LN18      9

Dass Letzte Teil sollte funktionieren, aber ich habe nicht in der Lage zu führen Sie die ersten merge-auf die gen-Namen durch einen MemoryError. Unten sind Ausschnitte von jeder DataFrame.

Daten

cell_s =

    Description          Name                      level_2  0
0  LOC100009676  100009676_at  LN18_CENTRAL_NERVOUS_SYSTEM  1
1  LOC100009676  100009676_at               22RV1_PROSTATE  2
2  LOC100009676  100009676_at               DU145_PROSTATE  3
3          AKT3      10000_at  LN18_CENTRAL_NERVOUS_SYSTEM  4
4          AKT3      10000_at               22RV1_PROSTATE  5
5          AKT3      10000_at               DU145_PROSTATE  6
6          MED6      10001_at  LN18_CENTRAL_NERVOUS_SYSTEM  7
7          MED6      10001_at               22RV1_PROSTATE  8
8          MED6      10001_at               DU145_PROSTATE  9

cell_s ist ungefähr 10.000.000 Zeilen

patient_s =

             id level_1  0
0          MED6   Pat_1  1
1          MED6   Pat_2  1
2          MED6   Pat_3  1
3  LOC100009676   Pat_1  2
4  LOC100009676   Pat_2  2
5  LOC100009676   Pat_3  2
6          ABCD   Pat_1  3
7          ABCD   Pat_2  3
8          ABCD   Pat_3  3
    ....

patient_s ist über 1.200.000 werden Zeilen

Code

def get_score(cell, patient):
    cell_s = cell.set_index(['Description', 'Name']).stack().reset_index()
    cell_s.columns = ['Description', 'Name', 'cell', 's1']

    patient_s = patient.set_index('id').stack().reset_index()
    patient_s.columns = ['id', 'patient', 's2']

    # fails here:
    merged = cell_s.merge(patient_s, left_on='Description', right_on='id')
    merged['score'] = merged.s1 * merged.s2

    scores = merged.groupby(['patient','cell'])['score'].sum()
    return scores

War ich immer ein MemoryError, wenn zunächst die read_csving diese Dateien, aber dann ist die Angabe der dtypes das Problem behoben. Mit der Bestätigung, dass meine python ist 64-bit nicht beheben mein Problem. Ich habe nicht erreicht, die Grenzen auf pandas habe ich?

Python-3.4.3 |Anaconda 2.3.0 (64-bit)| Pandas 0.16.2

  • Spart man einiges an Speicher durch Umwandlung von strings zu categoricals, wenn Sie nicht bereits getan haben. Ich glaube nicht, dass 64-bit-pandas haben keine Speicher-Einschränkungen als das, was Ihr computer hat.
  • Beim importieren mit 'read_csv' ich die 'dtype='Kategorie' für alle Spalten mit strings, die ich bekommen TypeError: data type "category" not understood. Ich denke, da Kategorisch nicht ein numpy-array. Können Sie daran denken, eine Arbeit um? Kann ich das einfach ignorieren MemoryError?
  • Ich glaube, Sie haben zu konvertieren nach Lesen. Ich usu etwas wie df['x'] = df['x'].astype('category')
Schreibe einen Kommentar