如何将 CSV 数据读入 NumPy 中的记录数组?
- 2024-12-13 08:37:00
- admin 原创
- 100
问题描述:
是否有直接的方法将 CSV 文件的内容导入记录数组,就像 R 的read.table()
、read.delim()
和read.csv()
将数据导入 R 数据框一样?
或者我应该使用csv.reader()
然后申请numpy.core.records.fromrecords()
?
解决方案 1:
numpy.genfromtxt()
通过将delimiter
kwarg 设置为逗号来使用:
from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')
解决方案 2:
使用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. ]])
这为 pandasDataFrame
提供了许多有用的数据操作函数,而这些函数无法通过 numpy 记录数组直接使用。
DataFrame
是一个二维标记数据结构,其列可能具有不同类型的类型。您可以将其视为电子表格或 SQL 表...
我也会推荐numpy.genfromtxt
。但是,由于问题要求记录数组,而不是普通数组,因此dtype=None
需要在调用中添加参数genfromtxt
:
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. ]])
和
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')])
这样做的好处是可以轻松导入具有多种数据类型(包括字符串)的文件。
解决方案 3:
我试过了:
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 方法会有类似的解释器开销。
解决方案 4:
您还可以尝试recfromcsv()
猜测数据类型并返回格式正确的记录数组。
解决方案 5:
当我尝试使用 NumPy 和 Pandas 两种方法时,我发现使用 Pandas 有很多优点:
快点
更少的 CPU 使用率
与 NumPy genfromtxt 相比,RAM 使用量为 1/3
这是我的测试代码:
$ 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
测试numpy_csv
from numpy import genfromtxt
train = genfromtxt('/home/hvn/me/notebook/train.csv', delimiter=',')
测试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 和 pandas 的版本如下:
$ pip freeze | egrep -i 'pandas|numpy'
numpy==1.13.3
pandas==0.20.2
解决方案 6:
使用numpy.loadtxt
一个相当简单的方法。但它要求所有元素都是浮点数(int 等)
import numpy as np
data = np.loadtxt('c:\\1.csv',delimiter=',',skiprows=0)
解决方案 7:
您可以使用此代码将 CSV 文件数据发送到数组中:
import numpy as np
csv = np.genfromtxt('test.csv', delimiter=",")
print(csv)
解决方案 8:
这项工作很有魅力......
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)
解决方案 9:
这是最简单的方法:
import csv
with open('testfile.csv', newline='') as csvfile:
data = list(csv.reader(csvfile))
现在,数据中的每个条目都是一条记录,以数组表示。所以你有一个二维数组。它为我节省了很多时间。
解决方案 10:
我建议使用表格(pip3 install tables
)。您可以使用 pandas( )保存.csv
文件,.h5
`pip3 install pandas`
import pandas as pd
data = pd.read_csv("dataset.csv")
store = pd.HDFStore('dataset.h5')
store['mydata'] = data
store.close()
然后,您可以轻松地将数据加载到NumPy 数组中,即使数据量巨大,也能花费更少的时间。
import pandas as pd
store = pd.HDFStore('dataset.h5')
data = store['mydata']
store.close()
# Data in NumPy format
data = data.values
解决方案 11:
可在最新的 pandas 和 numpy 版本上使用。
import pandas as pd
import numpy as np
data = pd.read_csv('data.csv', header=None)
# Discover, visualize, and preprocess data using pandas if needed.
data = data.to_numpy()
解决方案 12:
我尝试过这个:
import pandas as p
import numpy as n
closingValue = p.read_csv("<FILENAME>", usecols=[4], dtype=float)
print(closingValue)
解决方案 13:
In [329]: %time my_data = genfromtxt('one.csv', delimiter=',')
CPU times: user 19.8 s, sys: 4.58 s, total: 24.4 s
Wall time: 24.4 s
In [330]: %time df = pd.read_csv("one.csv", skiprows=20)
CPU times: user 1.06 s, sys: 312 ms, total: 1.38 s
Wall time: 1.38 s
解决方案 14:
这是一个非常简单的任务,最好的方法如下
import pandas as pd
import numpy as np
df = pd.read_csv(r'C:UsersRonDesktopClients.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)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)