J'importe dans un panda DataFrame
un répertoire de |
-delimited.dat fichiers. Le code suivant fonctionne, mais je finis par manquer de RAM avec un MemoryError:
.Mémoire efficace importer de nombreux fichiers de données dans panda DataFrame en Python
import pandas as pd
import glob
temp = []
dataDir = 'C:/users/richard/research/data/edgar/masterfiles'
for dataFile in glob.glob(dataDir + '/master_*.dat'):
print dataFile
temp.append(pd.read_table(dataFile, delimiter='|', header=0))
masterAll = pd.concat(temp)
Y at-il une approche plus efficace en mémoire? Ou devrais-je aller tout à fait à une base de données? (Je vais passer à une base de données par la suite, mais je suis bébé en passant mon mouvement vers les pandas.) Merci!
FWIW, voici la tête d'un exemple fichier .dat:
cik|cname|ftype|date|fileloc
1000032|BINCH JAMES G|4|2011-03-08|edgar/data/1000032/0001181431-11-016512.txt
1000045|NICHOLAS FINANCIAL INC|10-Q|2011-02-11|edgar/data/1000045/0001193125-11-031933.txt
1000045|NICHOLAS FINANCIAL INC|8-K|2011-01-11|edgar/data/1000045/0001193125-11-005531.txt
1000045|NICHOLAS FINANCIAL INC|8-K|2011-01-27|edgar/data/1000045/0001193125-11-015631.txt
1000045|NICHOLAS FINANCIAL INC|SC 13G/A|2011-02-14|edgar/data/1000045/0000929638-11-00151.txt
Merci! Cela fonctionne mieux, mais je n'ai toujours pas de mémoire, alors je passe à une base de données. Merci pour la leçon sur les générateurs. –
Eh bien, les générateurs ne sont pas vraiment spéciaux. Ils sont simplement "paresseux évalués" afin que vous puissiez traiter des données et ensuite les jeter, vous permettant d'avoir plus de mémoire libre. Mais si vous devez créer une chaîne de 6 Go avec seulement 4 Go de RAM, vous ne pouvez rien faire pour éviter les erreurs de mémoire ou d'échange. – Bakuriu