Çok sayıda 8 baytlık tamsayıları yönetmek için pandaları kullanıyorum. Bu tamsayılar virgülle ayrılmış bir CSV dosyasındaki bir sütunun boşlukla ayrılmış öğeleri olarak dahil edilir ve dizi boyutu yaklaşık 10000x10000'dür.pandalar büyük StringIO nesnesinden okunamayan pandalar
Pandalar, virgülle ayrılmış verileri ilk birkaç sütundan bir DataFrame olarak hızlı bir şekilde okuyabilir ve ayrıca alanla sınırlanmış dizeleri başka bir DataFrame'de hızlı bir şekilde en az güçlükle depolayabilir. Sorun, tabloyu, tek bir boşlukla ayrılmış dizelerden oluşan bir kolondan 8 bitlik tamsayıların DataFrame'ine dönüştürmeye çalıştığımda ortaya çıkıyor. tamsayılar 10MB değerinde 2GB bellek tüketir -
intdata = pd.DataFrame(strdata.columnname.str.split().tolist(), dtype='uint8')
Ama bellek kullanımı dayanılmaz:
Aşağıdaki çalıştılar. Bu dilin bir sınırlaması olduğunu ve bu durumda bunun hakkında yapabileceğim hiçbir şey olmadığı söylendi.
Olası bir geçici çözüm olarak, dize verilerini bir CSV dosyasına kaydetmesi ve ardından CSV dosyasını alanla sınırlı tamsayıların bir DataFrame'i olarak yeniden yüklemesi tavsiye edildi. Bu iyi çalışıyor, ancak disketten diske gelen yavaşlamayı önlemek için bir StringIO nesnesine yazmayı denedim. aşağıdaki hata iletisini verir
import numpy as np
import pandas as pd
from cStringIO import StringIO
a = np.random.randint(0,256,(10000,10000)).astype('uint8')
b = pd.DataFrame(a)
c = StringIO()
b.to_csv(c, delimiter=' ', header=False, index=False)
d = pd.io.parsers.read_csv(c, delimiter=' ', header=None, dtype='uint8')
: Burada
minimal olmayan çalışma örneği, çözmeye çalıştığıTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 443, in parser_f
return _read(filepath_or_buffer, kwds)
File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 228, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 533, in __init__
self._make_engine(self.engine)
File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 670, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 1032, in __init__
self._reader = _parser.TextReader(src, **kwds)
File "parser.pyx", line 486, in pandas.parser.TextReader.__cinit__ (pandas/parser.c:4494)
ValueError: No columns to parse from file
Ben 'c.csv'
yerine c
ile tam aynı kod çalıştırmasına çünkü eğer , kod mükemmel çalışıyor. Aşağıdaki parçacığını kullanırsanız Ayrıca:
file = open('c.csv', 'w')
file.write(c.getvalue())
CSV dosyası böylece StringIO nesnesine yazma, herhangi bir sorun olmadan kaydedilmesini sorun değildir.
Ben read_csv hattında c.getvalue()
ile c
değiştirmeniz gerekiyor mümkündür, ama bunu yaparken, tercüman Terminalde c
içeriğini yazdırmak için çalışır! Elbette bu konuda çalışmanın bir yolu var.
Yardım için şimdiden teşekkür ederiz.
bu mükemmel yanıt için teşekkür ederiz. Çok müteşekkirim. –