하나의 데이터 프레임으로 읽으려면 너무 큰 범주 형 데이터 (주로 "Nan"- 여기저기서 실제 값으로 채워짐)의 큰 파일 (2GB)이 있습니다. . 각 열의 모든 고유 값을 저장하는 객체로 오히려 어려움을 겪었습니다 (어떤 것이 내 목표입니까 - 결국 모델링을 위해 이것을 분해해야합니다).목록 목록을 늘리는 Python 방법
내가 끝낸 것은 파일을 읽는 것이 었습니다. 청크로 데이터 프레임에 넣은 다음 각 열의 고유 한 값을 가져 와서 목록에 저장합니다. 내 솔루션은 작동하지만 파이썬이 아닌 듯 보였습니다. 파이썬 (ver 3.5)에서이를 수행 할 수있는 더 깨끗한 방법이 있습니까? 열 수 (~ 2100)를 알고 있습니다. 다음과 같이 그 후
import pandas as pd
#large file of csv separated text data
data=pd.read_csv("./myratherlargefile.csv",chunksize=100000, dtype=str)
collist=[]
master=[]
i=0
initialize=0
for chunk in data:
#so the first time through I have to make the "master" list
if initialize==0:
for col in chunk:
#thinking about this, i should have just dropped this col
if col=='Id':
continue
else:
#use pd.unique as a build in solution to get unique values
collist=chunk[col][chunk[col].notnull()].unique().tolist()
master.append(collist)
i=i+1
#but after first loop just append to the master-list at
#each master-list element
if initialize==1:
for col in chunk:
if col=='Id':
continue
else:
collist=chunk[col][chunk[col].notnull()].unique().tolist()
for item in collist:
master[i]=master[i]+collist
i=i+1
initialize=1
i=0
는 모든 고유 값에 대한 내 마지막 작업은 다음과 같습니다
i=0
names=chunk.columns.tolist()
for item in master:
master[i]=list(set(item))
master[i]=master[i].append(names[i+1])
i=i+1
따라서 마스터 [I] 나에게 열 이름 다음 고유 한 값의 목록을 제공합니다 - 원유를하지만, 그것은 효과가 있습니다 - 제 관심사는 가능한 경우 "더 나은"방법으로 목록을 작성하는 것입니다.
는 생각지 사용하는 것이 좋습니다? (yield 키워드 검색) – salparadise
그 트릭을 할 수도 있습니다. 저는 반복자와 생성자에 대해서는 아직 좋지 않습니다. 그러나 제안 된대로 yield 키워드를 간단히 훑어 보는 것이 올바른 방향 인 것으로 보입니다. – RDS
이것은 실제로 후드 아래의 발전기를 사용하고 있습니다. 청크 스는 그 일을 정확하게 수행하고 있습니다. 호기심 때문에 32 비트 또는 64 비트 머신/파이썬에서 실행되고 있습니까? 'import sys; print (sys.maxsize) '는 파이썬 2.6을 실행하는 동안 작동해야합니다. –