np.genfromtxt不会生成二维数组

2024-10-06 06:47:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件,其中包含:

0812,EP2463,R,FEIGE
0812,EP2466,R,FEIGE
0816,EP2462,R,FEIGE
0816,EP2460,R,FEIGE

我需要把它转换成一个二维的字符串数组。当我尝试的时候

^{pr2}$

我得到一个一维阵列

^{3}$

有更好的方法吗?在


Tags: 文件csv方法字符串数组pr2ep2462ep2466
2条回答

您可以使用pandas,它有更多的内置功能:

import numpy as np
from io import StringIO

mystr = StringIO("""0812,EP2463,R,FEIGE
0812,EP2466,R,FEIGE
0816,EP2462,R,FEIGE
0816,EP2460,R,FEIGE""")

# replace mystr with 'data.csv'
res = pd.read_csv(mystr, header=None, dtype=object).values.astype(str)

结果:

^{pr2}$

在一个使用numpy 1.14的PY3(ipython)会话中,以及一个用BOM(在Linux中)编写为UTF8的文件中:

In [166]: np.genfromtxt('stack49969840.txt', delimiter=',', dtype=None,encoding='utf8')
Out[166]: 
array([['\ufeff0812', 'EP2463', 'R', 'FEIGE'],
       ['0812', 'EP2466', 'R', 'FEIGE'],
       ['0816', 'EP2462', 'R', 'FEIGE'],
       ['0816', 'EP2460', 'R', 'FEIGE']], dtype='<U6')

In [167]: np.genfromtxt('stack49969840.txt', delimiter=',', dtype=None,encoding='utf-8-sig')
Out[167]: 
array([(812, 'EP2463', 'R', 'FEIGE'), (812, 'EP2466', 'R', 'FEIGE'),
       (816, 'EP2462', 'R', 'FEIGE'), (816, 'EP2460', 'R', 'FEIGE')],
      dtype=[('f0', '<i8'), ('f1', '<U6'), ('f2', '<U1'), ('f3', '<U5')])

使用dtype=None,并且忽略BOM,这个数组是1d的结构化(复合)数据类型。也就是说,它推断第一列可以作为整数读取。在

作为字符串加载时,会给出一个二维字符串数据类型(这里是unicode,但可以是bytestring):

^{pr2}$

以二进制模式读取的同一文件是:

In [8]: open('stack49969840.txt',mode='rb').read()
Out[8]: b'\xef\xbb\xbf0812,EP2463,R,FEIGE\n0812,EP2466,R,FEIGE\n0816,EP2462,R,FEIGE\n0816,EP2460,R,FEIGE\n'

用你的额外的绳子:

你多余的绳子是

In [168]: print('\xef\xbb\xbf')


相关问题 更多 >