언급 한대로 첫 번째 행을 읽지 않아도됩니다.
do_not_read_cols = [3, 4, 9]
data = np.loadtxt('filename')
data = np.delete(data, do_read_cols, axis=1)
이 몹시 메모리 효율이되지 않습니다,하지만 loadtxt
아주 메모리 효율로 시작하는 시도하지 않습니다
그러나, 이렇게하는 것이 더 쉬울 수 있습니다. 대다수의 열을 삭제하지 않는 한, 으로 전화를 걸면 더 많은 메모리를 사용하게됩니다. 이는 delete
이 작성하는 후속 임시 복사본보다 많습니다. 당신이 메모리를 효율적으로 원하는 pandas
을 사용하지 않으려면
또 다른 옵션은이 같은, 아래 내 댓글에 확장하려면 : (참고 :. 조금 엉성하게 작성)
import numpy as np
def generate_text_file(length=1e6, ncols=20):
data = np.random.random((length, ncols))
np.savetxt('large_text_file.csv', data, delimiter=',')
def iter_loadtxt(filename, delimiter=',', skiprows=0, skipcols=None,dtype=float):
if skipcols is None:
skipcols = []
def iter_func():
with open(filename, 'r') as infile:
for _ in range(skiprows):
next(infile)
for line in infile:
line = line.rstrip().split(delimiter)
for i, item in enumerate(line):
if i in skipcols:
continue
yield dtype(item)
iter_loadtxt.rowlength = len(line) - len(skipcols)
data = np.fromiter(iter_func(), dtype=dtype)
data = data.reshape((-1, iter_loadtxt.rowlength))
return data
#generate_text_file()
data = iter_loadtxt('large_text_file.csv')
감사합니다.하지만 불행히도 메모리 효율이 처음부터이 모든 이유입니다. 따라서이 문제가 저에게 효과적이지 않습니다. – Nils
@Nils - 메모리 효율이 걱정된다면,'loadtxt'를 사용하지 마십시오. 어레이를로드하는 데 필요한 메모리를 ~ 8x 사용합니다. (내 자신의 대답을 연결하는 것이 아니라 예제로 보자 : http://stackoverflow.com/questions/8956832/python-out-of-memory-on-large-csv-file-numpy/8964779#8964779)' pandas'는 실제로 그 경로를 가고 싶다면 실제로 매우 효율적입니다. 'pandas'는 각 column_을 자신의 배열에 효과적으로 저장하기 때문에, 한 세트의 열을 삭제해도 복사본을 만들 필요가 없습니다. 또는 몇 줄에로드 생성기를 직접 작성하고'np.fromiter'를 사용하여 읽을 수 있습니다. –
일부 기존 코드를 수정하는 중이므로 전체 패키지를 사용하기 위해 전체 메서드를 다시 작성하지 않는 것이 좋습니다. 그러나 그것이 나의 결정 이었 더라면 나는 아마 첫번째로 팬더를 사용했을 텐데, 예. :) – Nils