如何将 CSV 数据读入 NumPy 中的记录数组?

2024-12-13 08:37:00
admin
原创
175
摘要:问题描述:是否有直接的方法将 CSV 文件的内容导入记录数组,就像 R 的read.table()、read.delim()和read.csv()将数据导入 R 数据框一样?或者我应该使用csv.reader()然后申请numpy.core.records.fromrecords()?解决方案 1:numpy...

问题描述:

是否有直接的方法将 CSV 文件的内容导入记录数组,就像 R 的read.table()read.delim()read.csv()将数据导入 R 数据框一样?

或者我应该使用csv.reader()然后申请numpy.core.records.fromrecords()


解决方案 1:

numpy.genfromtxt()通过将delimiterkwarg 设置为逗号来使用:

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)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2379  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1510  
  PLM(产品生命周期管理)系统在企业项目管理中扮演着至关重要的角色,它能够整合产品从概念设计到退役的全流程信息,提升协同效率,降低成本。然而,项目范围蔓延是项目管理过程中常见且棘手的问题,在PLM系统环境下也不例外。范围蔓延可能导致项目进度延迟、成本超支、质量下降等一系列不良后果,严重影响项目的成功交付。因此,如何在P...
plm项目经理是做什么   16  
  PLM(产品生命周期管理)系统在现代企业的产品研发与管理过程中扮演着至关重要的角色。它不仅仅是一个管理产品数据的工具,更能在利益相关者分析以及沟通矩阵设计方面提供强大的支持。通过合理运用PLM系统,企业能够更好地识别、理解和管理与产品相关的各类利益相关者,构建高效的沟通机制,从而提升产品开发的效率与质量,增强企业的市场...
plm是什么   20  
  PLM(产品生命周期管理)项目管理对于企业产品的全生命周期规划、执行与监控至关重要。在项目推进过程中,监控进度偏差是确保项目按时、按质量完成的关键环节。五维健康检查指标体系为有效监控PLM项目进度偏差提供了全面且系统的方法,涵盖了项目的多个关键维度,有助于及时发现问题并采取针对性措施。需求维度:精准把握项目基石需求维度...
plm项目管理软件   18  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用