是否有一种直接的方法将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()?
当前回答
我试了一下:
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方法也有类似的解释器开销。
其他回答
我试了一下:
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方法也有类似的解释器开销。
使用pandas.read_csv:
import pandas as pd
df = pd.read_csv('myfile.csv', sep=',', header=None)
print(df.values)
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
这就提供了一个pandas DataFrame,它提供了许多numpy记录数组无法直接提供的有用的数据操作函数。
DataFrame是一个2维标记数据结构,列为 可能是不同的类型。你可以把它想象成一个电子表格 SQL表……
我还推荐numpy.genfromtxt。然而,由于问题要求的是记录数组,而不是普通数组,因此需要在genfromtxt调用中添加dtype=None参数:
import numpy as np
np.genfromtxt('myfile.csv', delimiter=',')
对于下面的'myfile.csv':
1.0, 2, 3
4, 5.5, 6
上面的代码给出了一个数组:
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
and
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')])
这样做的好处是可以轻松导入具有多种数据类型(包括字符串)的文件。
这是一个非常简单的任务,最好的方法如下
import pandas as pd
import numpy as np
df = pd.read_csv(r'C:\Users\Ron\Desktop\Clients.csv') #read the file (put 'r' before the path string to address any special characters in the file such as \). Don't forget to put the file name at the end of the path + ".csv"
print(df)`
y = np.array(df)
这件作品很有魅力……
import csv
with open("data.csv", 'r') as f:
data = list(csv.reader(f, delimiter=";"))
import numpy as np
data = np.array(data, dtype=np.float)
还可以尝试recfromcsv(),它可以猜测数据类型并返回正确格式化的记录数组。