Cra*_*igO 29 python numpy pandas genfromtxt
我试图读取一个csv文件,numpy.genfromtxt但有些字段是包含逗号的字符串.字符串是引号,但是numpy没有将引号识别为定义单个字符串.例如,使用't.csv'中的数据:
2012, "Louisville KY", 3.5
2011, "Lexington, KY", 4.0
Run Code Online (Sandbox Code Playgroud)
代码
np.genfromtxt('t.csv', delimiter=',')
Run Code Online (Sandbox Code Playgroud)
产生错误:
ValueError:检测到一些错误!第2行(有4列而不是3列)
我正在寻找的数据结构是:
array([['2012', 'Louisville KY', '3.5'],
['2011', 'Lexington, KY', '4.0']],
dtype='|S13')
Run Code Online (Sandbox Code Playgroud)
查看文档,我没有看到任何处理此问题的选项.有没有办法用numpy做,或者我只需要用csv模块读取数据然后将其转换为numpy数组?
jor*_*ris 21
您可以使用pandas(成为使用科学python中的数据帧(异构数据)的默认库).它read_csv可以解决这个问题.来自文档:
quotechar:string
Run Code Online (Sandbox Code Playgroud)The character to used to denote the start and end of a quoted item. Quoted items can include the delimiter and it will be ignored.
默认值为".一个例子:
In [1]: import pandas as pd
In [2]: from StringIO import StringIO
In [3]: s="""year, city, value
...: 2012, "Louisville KY", 3.5
...: 2011, "Lexington, KY", 4.0"""
In [4]: pd.read_csv(StringIO(s), quotechar='"', skipinitialspace=True)
Out[4]:
year city value
0 2012 Louisville KY 3.5
1 2011 Lexington, KY 4.0
Run Code Online (Sandbox Code Playgroud)
这里的诀窍是你还必须用skipinitialspace=True逗号分隔符来处理空格.
除了强大的csv阅读器之外,我还强烈建议将pandas与你拥有的异构数据一起使用(你给出的numpy中的示例输出都是字符串,尽管你可以使用结构化数组).
Bit*_*ise 12
额外逗号的问题np.genfromtxt并没有解决这个问题.
一个简单的解决方案是使用csv.reader()python的csv模块将文件读入列表,然后根据需要将其转储到numpy数组中.
如果你真的想要使用np.genfromtxt,请注意它可以采用迭代器而不是文件,例如np.genfromtxt(my_iterator, ...).因此,您可以csv.reader在迭代器中包装并将其赋予np.genfromtxt.
这将是这样的:
import csv
import numpy as np
np.genfromtxt(("\t".join(i) for i in csv.reader(open('myfile.csv'))), delimiter="\t")
Run Code Online (Sandbox Code Playgroud)
这实际上只是用标签替换了相应的逗号.
如果您使用的是 numpy,您可能想使用 numpy.ndarray。这会给你一个 numpy.ndarray:
import pandas
data = pandas.read_csv('file.csv').as_matrix()
Run Code Online (Sandbox Code Playgroud)
Pandas 将正确处理“列克星敦,肯塔基州”案例
| 归档时间: |
|
| 查看次数: |
39401 次 |
| 最近记录: |