2012-06-22 227 views
-4

我目前沒有試圖用Python導入大的csv數據集。基本上,我有一個由股票報價組成的大型csv文件(每個股票一列,每個股票另一列包含股息)。我正在使用csv模塊,但事實是,我無法得到np.array哪些列是股票報價.Python按行創建一個np.array,我想按列列出一個np.array。我能怎麼做??Python:大csv文件導入

感謝您的幫助!

+0

你的問題是什麼? –

+2

Python的'csv'模塊使用生成器遍歷數據。如果你試圖將一個巨大的數據集存儲在一個numpy數組中並且失敗了,那麼你可能根本沒有足夠的RAM。 –

+0

請寫下您的代碼 –

回答

0

我已經創建了小片的功能能源部採取csv文件的路徑讀取和一次很輕鬆地返回字典的列表,那麼你通過列表​​循環,

def read_csv_data(path): 
    """ 
     Reads CSV from given path and Return list of dict with Mapping 
    """ 
    data = csv.reader(open(path)) 
    # Read the column names from the first line of the file 
    fields = data.next() 
    data_lines = [] 
    for row in data: 
     items = dict(zip(fields, row)) 
     data_lines.append(items) 
    return data_lines 

可能,這將幫助你

Regards

+0

謝謝你的答案。我無法得到我想要的,所以我會更精確。這是我的數據庫的樣子: – marino89

0

你在找什麼是ndarray.shapendarray.reshape的功能。

http://www.scipy.org/Tentative_NumPy_Tutorial

否則,您可以只是簡單的閱讀你的方式,然後通過執行

x = x.transpose() 

其中x是一個ndarray做轉置。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.transpose.html 

所有這些小東西通常都在文檔中。我會建議仔細閱讀。

2

我會推薦使用Pandas庫。它還使您可以通過較小的塊來讀取較大的csv文件。下面是從文檔的examle:

數據:

year indiv zit xit 
0 1977 A 1.2 0.60 
1 1977 B 1.5 0.50 
2 1977 C 1.7 0.80 
3 1978 A 0.2 0.06 
4 1978 B 0.7 0.20 
5 1978 C 0.8 0.30 
6 1978 D 0.9 0.50 

指定塊大小(你可迭代):

reader = read_table(’tmp.sv’, sep=’|’, chunksize=4) 


for chunk in reader: 
.....: print chunk 

輸出:

year indiv zit xit 
0 1977 A 1.2 0.60 
1 1977 B 1.5 0.50 
2 1977 C 1.7 0.80 
3 1978 A 0.2 0.06 
year indiv zit xit 
0 1978 B 0.7 0.2 
1 1978 C 0.8 0.3 
2 1978 D 0.9 0.5 

NB!如果您需要進一步處理您的股票數據,熊貓無論如何都是最好的選擇。