2016-07-18 13 views
1

Sagen wir, ich habe eine .dat Datei, filename.dat, und ich möchte diese in eine Pandas Datenrahmen lesen:Gibt es eine Größenbeschränkung für Pandas read_table()?

import pandas as pd 
df = pd.read_table('filename.dat') 

Gibt es eine Größenbeschränkung in Bezug auf diese? Ich hatte gehofft, die Spalten eines Datenrahmens für eine Datei der Größe 1 TB einzeln zu speichern. Ist das möglich?

+1

ist es möglich, wenn der resultierende DF in den Speicher passen kann. Verwenden Sie 'Chunksize' Parameter, um große Dateien in Chunks zu lesen - das wird viel weniger Speicher verbrauchen – MaxU

+0

Ich würde es nicht empfehlen, wenn Sie keinen Speicher haben, wie @MaxU sagt. Wenn Sie Zeilen erstellen, ist es besser, [buffering] (http://pandas.pydata.org/pandas-docs/stable/io.html#io-chunking) mit 'chunksize' zu ​​verwenden, das von @MaxU oder setting' erwähnt wird Iterator zu True. Aber für Spalten und eine große Datei scheint das riskant. –

+0

@ClaytonWahlstrom Irgendwelche anderen Empfehlungen? – ShanZhengYang

Antwort

1

über die Verwendung von chunksize in den Kommentaren erwähnt zu erweitern, ich etwas tun würde, wie folgt aus:

chunks = pd.read_table('filename.dat', chunksize=10**5) 
fileout = 'filname_{}.dat' 
for i, chunk in enumerate(chunks): 
    mode = 'w' if i == 0 else 'a' 
    header = i == 0 
    for col in chunk.columns: 
     chunk[col].to_csv(fileout.format(col), index=False, header=header, mode=mode) 

Sie werden mit dem chunksize Parameter experimentieren wollen wahrscheinlich zu sehen, was für die effizienteste ist Daten.

Der Grund, warum ich enumerate benutze, ist eine neue Datei mit einem Header zu erstellen, wenn der erste Chunk eingelesen wird, und ohne Header für nachfolgende Chunks anzuhängen.

Verwandte Themen