我有一個熊貓數據幀,我想分成幾個100k行的小塊,然後保存到磁盤上,以便我可以讀取數據並逐個處理它。我試過使用dill
和hdf
存儲,因爲csv和原始文本似乎需要很長時間。高效讀寫熊貓數據幀
我想這對一個數據的子集〜500K行和混合數據的五列。兩個包含字符串,一個整數,一個浮點數,最後一個包含來自sklearn.feature_extraction.text.CountVectorizer
的bigram計數,存儲爲scipy.sparse.csr.csr_matrix
稀疏矩陣。
這是我遇到問題的最後一列。轉儲和加載數據沒有問題,但是當我嘗試實際訪問數據時,它是一個pandas.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億行的全部數據。
你是如何創建/追加'count'列? – MaxU
我將此代碼添加到代碼 – Tobias
我認爲將稀疏矩陣存儲爲熊貓列不是一個好主意 - IMO是一種容易出錯的方式。我會將它們分開存儲... – MaxU