如何将CSV文件加载到IPython笔记本中

3

我有一个CSV文件,准备加载到我的Python代码中,但是,我希望以以下格式进行加载:

data = [[A,B,C,D],
        [A,B,C,D],
        [A,B,C,D],
       ]

我该如何加载可读作为Numpy数组的csv文件?例如,以前的教程可能会对以下内容造成混乱:
data = np.array(data)

如果不行,我只想上传我的csv文件(例如,将数据命名为'dual-Cored.csv'并将其作为数据上传)。
4个回答

10

最简单的解决方案就是:

import numpy as np

data = np.loadtxt("myfile.csv")
只要数据可以转换为float并且每行具有相同数量的列,这个函数就能够工作。
如果某一列的数据无法转换为float,则您可以编写自己的转换器。请参阅numpy.loadtxt文档。它非常灵活。

5
IPython notebook 从哪里导入 CSV 文件? - Malachi Bazar

2
如果你的CVS文件看起来像这样:
A,B,C,D
A,B,C,D
A,B,C,D
A,B,C,D

那么。
import csv
with open(filename, 'rb') as f:
    data = list(csv.reader(f))

data赋值为

[['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D']]

这个可以工作,但我想要它的形式是:[[A,B,C],[A,B,C]]。我不想要引号。 - user3125347
1
@user3125347 引号表示字符串;如果您的数据不是数字,则它们不是可选的。 - jonrsharpe
你好,我的csv文件中的数据结构与上面的例子完全相同。我正在使用你上面的代码,只是将文件名替换为我的文件名,并尝试在我的jupyter笔记本上读取csv文件。它显示没有这样的文件或目录'文件名'。我错过了什么吗? - melar

1
作为一个小例子,我有一些名为data.csv的文件,其内容如下。

A,B,C,D
1,2,3,4
W,X,Y,Z
5,6,7,8

with open('data.csv', 'r') as f:
    data = [i.split(",") for i in f.read().split()]
    print data

输出

[['A', 'B', 'C', 'D'],
 ['1', '2', '3', '4'],
 ['W', 'X', 'Y', 'Z'],
 ['5', '6', '7', '8']]

@user3125347,您所说的“可被NumPy读取”是什么意思?这是您要求的格式,而NumPy肯定可以处理它。 - jonrsharpe

1
我假设您的意思是获取所有数据点的整数或浮点数。首先,我编写了一些示例数据:
with open('dual-Cored.csv', 'w') as f:     
    f.write('1,2,3,4\n5,6,7,8\n9,10,11,12')

现在我正在读取示例数据。
with open('dual-Cored.csv', 'rU') as f:
    c = csv.reader(f)
    for l in c:
         print list(map(int, l))

这段代码会输出什么:

[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]

我建议您在Python教程中了解一下Python数据类型,其中讲述了字符串和数值类型之间的区别。

使用csv模块将数据读取到numpy数组中:

import numpy
with open('dual-Cored.csv', 'rU') as f:
    c = csv.reader(f)
    ar = numpy.array(list(c), dtype=int)

and ar现在返回:

array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

或者直接使用numpy.genfromtxt函数(需要指定分隔符):

numpy.genfromtxt('dual-Cored.csv', delimiter=',')

返回:
array([[  1.,   2.,   3.,   4.],
       [  5.,   6.,   7.,   8.],
       [  9.,  10.,  11.,  12.]])

如果目标是一个numpy数组,为什么不直接使用numpy.loadtxt呢? - MaxNoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接