如何在NumPy中將CSV數據讀入記錄數組?

我想知道是否有直接的方法將CSV文件的內容導入記錄數組,就像R的read.table()read.delim()read.csv()系列將數據導入R的方式同樣數據框架? html

或者是使用csv.reader()而後應用相似numpy.core.records.fromrecords()的最佳方法? 數組


#1樓

我會推薦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.csvcode

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')])

這樣作的好處是能夠輕鬆導入具備多種數據類型(包括字符串)的文件。


#2樓

我定時了

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方法會有相似的解釋器開銷。


#3樓

你能夠使用Numpy的genfromtxt()方法,經過將delimiter kwarg設置爲逗號。

from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')

有關該功能的更多信息,請參見其相應的文檔


#4樓

您能夠使用此代碼將CSV文件數據發送到數組中:

import numpy as np
csv = np.genfromtxt('test.csv', delimiter=",")
print(csv)

#5樓

我試過這個:

import pandas as p
import numpy as n

closingValue = p.read_csv("<FILENAME>", usecols=[4], dtype=float)
print(closingValue)
相關文章
相關標籤/搜索