我想知道是否有直接的方法將CSV文件的內容導入記錄數組,就像R的read.table()
, read.delim()
和read.csv()
系列將數據導入R的方式同樣數據框架? html
或者是使用csv.reader()而後應用相似numpy.core.records.fromrecords()
的最佳方法? 數組
我會推薦pandas
庫中的read_csv
函數: 數據結構
import pandas as pd df=pd.read_csv('myfile.csv', sep=',',header=None) df.values array([[ 1. , 2. , 3. ], [ 4. , 5.5, 6. ]])
這給了一個pandas DataFrame - 容許許多有用的數據操做函數,這些函數不能直接用於numpy記錄數組 。 框架
DataFrame是一個二維標記數據結構,具備可能不一樣類型的列。 你能夠把它想象成電子表格或SQL表...... 函數
我也推薦genfromtxt
。 可是,因爲問題要求記錄數組 ,而不是普通數組,所以須要將genfromtxt
dtype=None
參數添加到genfromtxt
調用: spa
給定一個輸入文件myfile.csv
: code
1.0, 2, 3 4, 5.5, 6 import numpy as np np.genfromtxt('myfile.csv',delimiter=',')
給出一個數組: htm
array([[ 1. , 2. , 3. ], [ 4. , 5.5, 6. ]])
和 ip
np.genfromtxt('myfile.csv',delimiter=',',dtype=None)
給出一個記錄數組: ci
array([(1.0, 2.0, 3), (4.0, 5.5, 6)], dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<i4')])
這樣作的好處是能夠輕鬆導入具備多種數據類型(包括字符串)的文件。
我定時了
from numpy import genfromtxt genfromtxt(fname = dest_file, dtype = (<whatever options>))
與
import csv import numpy as np with open(dest_file,'r') as dest_f: data_iter = csv.reader(dest_f, delimiter = delimiter, quotechar = '"') data = [data for data in data_iter] data_array = np.asarray(data, dtype = <whatever options>)
在460萬行,大約70列,發現NumPy路徑須要2分16秒,而csv-list理解方法須要13秒。
我建議使用csv-list理解方法,由於它極可能依賴於預編譯的庫而不是NumPy那樣的解釋器。 我懷疑pandas方法會有相似的解釋器開銷。
你能夠使用Numpy的genfromtxt()
方法,經過將delimiter
kwarg設置爲逗號。
from numpy import genfromtxt my_data = genfromtxt('my_file.csv', delimiter=',')
有關該功能的更多信息,請參見其相應的文檔 。
您能夠使用此代碼將CSV文件數據發送到數組中:
import numpy as np csv = np.genfromtxt('test.csv', delimiter=",") print(csv)
我試過這個:
import pandas as p import numpy as n closingValue = p.read_csv("<FILENAME>", usecols=[4], dtype=float) print(closingValue)