나는 100k 행의 여러 개의 작은 조각으로 분할하고 디스크에 저장하여 데이터를 읽고 처리 할 수 있도록 팬더 데이터 프레임을 가지고 있습니다. CSV 및 원시 텍스트가 많은 시간이 걸리는 것처럼 보였으므로 dill
및 hdf
저장 용량을 사용해 보았습니다.판다 데이터 프레임의 효율적인 읽기 및 쓰기
나는이 데이터를 ~ 500k 개의 행과 5 개의 혼합 데이터 열을 사용하여 데이터의 일부분에서 테스트하려고한다. 2 개는 문자열, 하나의 정수, 하나의 부동 소수점을 포함하며 마지막에는 sklearn.feature_extraction.text.CountVectorizer
의 bigram 카운트가 포함되어 있으며 scipy.sparse.csr.csr_matrix
스파 스 매트릭스로 저장됩니다.
문제가있는 것은 마지막 열입니다. 데이터 덤프 및 로딩은 문제없이 진행되지만, 실제로 데이터에 액세스하려고하면 pandas.Series 객체가됩니다. 두 번째로, Series의 각 행은 대신 전체 데이터 세트를 포함하는 튜플입니다.
# Before dumping, the original df has 100k rows.
# Each column has one value except for 'counts' which has 1400.
# Meaning that df['counts'] give me a sparse matrix that is 100k x 1400.
vectorizer = sklearn.feature_extraction.text.CountVectorizer(analyzer='char', ngram_range=(2,2))
counts = vectorizer.fit_transform(df['string_data'])
df['counts'] = counts
df_split = pandas.DataFrame(np.column_stack([df['string1'][0:100000],
df['string2'][0:100000],
df['float'][0:100000],
df['integer'][0:100000],
df['counts'][0:100000]]),
columns=['string1','string2','float','integer','counts'])
dill.dump(df, open(file[i], 'w'))
df = dill.load(file[i])
print(type(df['counts'])
> <class 'pandas.core.series.Series'>
print(np.shape(df['counts'])
> (100000,)
print(np.shape(df['counts'][0])
> (496718, 1400) # 496718 is the number of rows in my complete data set.
print(type(df['counts']))
> <type 'tuple'>
오전 나는 어떤 명백한 실수를하거나이 형식이 데이터, 매우 시간이 소모되지 않습니다 하나를 저장할 수있는 더 좋은 방법은 무엇입니까? 그것은 1 억 행을 포함하는 전체 데이터로 확장 가능해야합니다.
가 어떻게 창조 하셨 는가 내가 추가/원래 DF 및
count
희소 행렬을 저장하기를 권 해드립니다 왜 년대 'counts' 칼럼? – MaxU코드에이 코드를 추가했습니다. – Tobias
스파 스 매트릭스를 팬더 열로 저장하는 것이 좋습니다. IMO 오류가 발생하기 쉽습니다. 나는 그들을 개별적으로 보관할 것입니다 ... – MaxU