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

新手上路,请多包涵

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

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

原文由 hatmatrix 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 541
2 个回答

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

 from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')

原文由 Andrew 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 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 是一个二维标记数据结构,具有可能不同类型的列。您可以将其视为电子表格或 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')])

这样做的好处是 可以轻松导入具有多种数据类型(包括字符串) 的文件。

原文由 Lee 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题