我想知道是否有一種直接的方法可以將csv文件的內容導入到記錄陣列中,這與R的read.table()
,read.delim()
和read.csv()
系列將數據導入到R的數據框的方式相當?如何將csv讀入numpy中的記錄數組?
或者是使用csv.reader()然後應用numpy.core.records.fromrecords()
之類的最佳方式?
我想知道是否有一種直接的方法可以將csv文件的內容導入到記錄陣列中,這與R的read.table()
,read.delim()
和read.csv()
系列將數據導入到R的數據框的方式相當?如何將csv讀入numpy中的記錄數組?
或者是使用csv.reader()然後應用numpy.core.records.fromrecords()
之類的最佳方式?
您可以使用Numpy的genfromtxt()
方法來完成此操作,方法是將delimiter
kwarg設置爲逗號。
from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')
有關該功能的更多信息,請參閱其各自的documentation。
如果你想要一些不同類型的東西,該怎麼辦?像字符串和整數? – CGTheLegend 2017-03-21 02:20:49
@CGTheLegend np.genfromtxt('myfile.csv',delimiter =',',dtype = None) – chickensoup 2017-04-26 02:45:48
[numpy.loadtxt](https://docs.scipy.org/doc/numpy/reference/generated/numpy。 loadtxt.html)對我來說工作得很好 – 2017-05-19 17:34:22
您也可以嘗試recfromcsv()
,它可以猜測數據類型並返回格式正確的記錄數組。
如果要維護CSV中的排序/列名稱,可以使用以下調用:'numpy.recfromcsv(fname,delimiter =',',filling_values = numpy.nan,case_sensitive = True,deletechars ='',replace_space ='')' 關鍵參數是最後三個。 – eacousineau 2013-10-17 14:00:43
我會從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. ]])
這給出了一個熊貓DataFrame - 允許many useful data manipulation functions which are not directly available with numpy record arrays。
DataFrame is a 2-dimensional labeled data structure with columns of potentially different types. You can think of it like a spreadsheet or SQL table...
我也建議genfromtxt
。然而,由於這個問題要求一個record array,而不是正常的陣列,所述dtype=None
參數需要被添加到genfromtxt
呼叫:
給定一個輸入文件,myfile.csv
:
1.0, 2, 3
4, 5.5, 6
import numpy as np
np.genfromtxt('myfile.csv',delimiter=',')
給出了一個陣列:
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
和
np.genfromtxt('myfile.csv',delimiter=',',dtype=None)
給出了一個記錄陣列:
array([(1.0, 2.0, 3), (4.0, 5.5, 6)],
dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<i4')])
這具有與multiple data types (including strings) can be easily imported文件的優勢。
read_csv在引號內使用逗號。通過genfromtxt推薦此文件 – Viet 2016-04-06 21:37:00
如果您的文件具有1行標題,則使用標題= 0跳過值中的第一行 – 2017-06-30 13:34:54
我約70列定時的
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萬行,發現numpy的路花了2分分鐘16戰鬥機和CSV列表理解方法了13S。
我會推薦csv-list理解方法,因爲它很可能依賴於預編譯的庫,而不是像numpy那樣多的解釋器。我懷疑熊貓的方法會有類似的解釋開銷。
我測試了與包含260萬行和8列的csv文件類似的代碼。 numpy.recfromcsv()耗時約45秒,np.asarray(list(csv.reader()))耗時約7秒,而pandas.read_csv()耗時約2秒(!)。 (這個文件最近在所有情況下都是從磁盤讀取的,所以它已經存在於操作系統的文件緩存中。)我想我會和大熊貓一起去。 – 2016-03-31 21:56:37
我剛剛注意到有一些關於熊貓的快速csv解析器的設計說明,網址是http://wesmckinney.com/blog/a-new-high-performance-memory-efficient-file-parser-engine-for-pandas/ 。作者非常重視速度和內存要求。也可以使用as_recarray = True直接將結果作爲Python記錄數組而不是熊貓數據框。 – 2016-04-05 19:20:31
您可以使用此代碼在發送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)
當我嘗試使用numpy的和熊貓兩種方式,利用大熊貓有很多優點: - 更快 - 更低的CPU使用率 - 1/3 RAM使用比較numpy的genfromtxt
這是我的測試代碼:
$ for f in test_pandas.py test_numpy_csv.py ; do /usr/bin/time python $f; done
2.94user 0.41system 0:03.05elapsed 109%CPU (0avgtext+0avgdata 502068maxresident)k
0inputs+24outputs (0major+107147minor)pagefaults 0swaps
23.29user 0.72system 0:23.72elapsed 101%CPU (0avgtext+0avgdata 1680888maxresident)k
0inputs+0outputs (0major+416145minor)pagefaults 0swaps
test_numpy_csv.py
from numpy import genfromtxt
train = genfromtxt('/home/hvn/me/notebook/train.csv', delimiter=',')
test_pandas.py
from pandas import read_csv
df = read_csv('/home/hvn/me/notebook/train.csv')
數據文件:
du -h ~/me/notebook/train.csv
59M /home/hvn/me/notebook/train.csv
隨着numpy的和熊貓的版本:
$ pip freeze | egrep -i 'pandas|numpy'
numpy==1.13.3
pandas==0.20.2
使用numpy.loadtxt
一個很簡單的方法。但是,它需要的所有元素是浮動(INT等)
import numpy as np
data = np.loadtxt('c:\\1.csv',delimiter=',',skiprows=0)
的可能的複製[如何閱讀和使用Python寫的CSV文件?(http://stackoverflow.com/questions/41585078/how -do -i-read-and-write-csv-files-with-python) – 2017-01-16 15:28:56