2016-07-13 21 views
3

Ich mache Ersatz über dict auf große Serie (3M Aufzeichnungen ca.). Dict Größe ist ~ 11k wie folgt aus:Pandas ersetzen mit Dict-Problem

data['TOBE'] = data['ASIS'].replace(zdict) 

Es dauert eine Weile, und dann erhalte ich einen Fehler des Typs Konflikt:

TypeError: Cannot compare types 'ndarray(dtype=object)' and 'str' 

ich die dict geprüft:

set([str(type(key)) for key in zdict.keys()]) 

gibt:

{"<class 'str'>"} 

Dann überprüft die Seri es Daten:

set([str(type(val)) for val in data['ASIS']]) 

gibt:

{"<class 'str'>"} 

Das habe ich versucht, Stücke zu ersetzen, zum Beispiel:

data['ASIS'][:1500000].replace(zdict) 
data['ASIS'][1500000:].replace(zdict) 

und bekam keine Fehler ...

So dass ich jetzt kippe verstehe, warum ich diesen merkwürdigen Fehler auf dem ganzen Bereich bekomme, aber nicht auf Blöcke, die den gesamten Umfang abdecken.

Antwort

1

Ich sehe, dass, was Sie mit einem Zdict Daten ersetzen. Wenn dies this Python-Framework darstellt, dann würden Sie versuchen, stattdessen mit einem Dummy-Daten im String-Format mit den Zdict-Daten zu ersetzen. Wenn dies möglich ist, liegt möglicherweise ein Fehler mit dem Framework selbst für große Datenmengen vor.

+0

Vielen Dank! Ich kannte das zdict-Paket nicht, aber das ist mein Name. Coincidence :( –

+0

Kein Problem. Ich war mir nicht sicher. Haben Sie versucht, es auf diese Weise schneiden: '[:]' oder Slicing mit steigendem Wert wie 1 500 000 dann 2 000 000 dann 2 500 000 zu überprüfen, wann es brechen wird ? –

+0

Noch nicht, aber ich werde definitiv größere Scheiben versuchen –

0

Also meine einzige Hypotesis ist, dass es ein unzureichendes Speicherproblem ist, das nicht durch Ausnahme verarbeitet wird.

Ich denke daran, weil ich während des Ersetzens ~ 98% RAM-Nutzung bekomme. Ich habe nur 8 GB.

Der Chunk-Ansatz scheint zu funktionieren.

Verwandte Themen