我想知道是否有直接的方法将CSV文件的内容导入记录数组,就像R的 read.table()
, read.delim()
和 read.csv()
系列将数据导入R的数据框一样?
或者是使用csv.reader()然后应用类似 numpy.core.records.fromrecords()
的最佳方式?
我想知道是否有直接的方法将CSV文件的内容导入记录数组,就像R的 read.table()
, read.delim()
和 read.csv()
系列将数据导入R的数据框一样?
或者是使用csv.reader()然后应用类似 numpy.core.records.fromrecords()
的最佳方式?
10 回答
您可以使用此代码将CSV文件数据发送到数组中:
使用numpy.loadtxt
一个非常简单的方法 . 但它需要所有元素都是float(int等)
我建议使用表格(
pip3 install tables
) . 您可以使用pandas(pip3 install pandas
)将.csv
文件保存到.h5
,然后,您可以轻松地,即使对于大量数据,也可以用更少的时间将数据加载到NumPy阵列中 .
我会推荐
pandas
库中的read_csv函数:这给了一只大熊猫DataFrame - 允许many useful data manipulation functions which are not directly available with numpy record arrays .
我也建议
genfromtxt
. 但是,由于问题要求record array,而不是普通数组,因此需要将dtype=None
参数添加到genfromtxt
调用中:给定输入文件,
myfile.csv
:给出一个数组:
和
给出一个记录数组:
这具有multiple data types (including strings) can be easily imported文件的优点 .
这是最简单的方法:
import csv with open('testfile.csv', newline='') as csvfile: data = list(csv.reader(csvfile))
现在,数据中的每个条目都是一个记录,表示为数组 . 所以你有一个2D数组 . 它为我节省了很多时间 .
我定时了
与
在460万行,大约70列,发现NumPy路径需要2分16秒,而csv-list理解方法需要13秒 .
我建议使用csv-list理解方法,因为它很可能依赖于预编译的库而不是NumPy那样的解释器 . 我怀疑pandas方法会有类似的解释器开销 .
您也可以尝试
recfromcsv()
,它可以猜测数据类型并返回格式正确的记录数组 .我试过这个:
您可以使用Numpy的
genfromtxt()
方法,通过将delimiter
kwarg设置为逗号 .有关该功能的更多信息可在各自的documentation找到 .
当我尝试使用NumPy和Pandas时,使用pandas有很多优点:
更快
减少CPU使用率
与NumPy genfromtxt相比,
1/3 RAM使用率
这是我的测试代码:
test_numpy_csv.py
test_pandas.py
数据文件:
在版本中使用NumPy和pandas: