使用numpy.loadtxt()将文本文件作为字符串加载

use*_*176 21 python numpy

我想加载一个大文本文件(大约1 GB,3*10 ^ 6行和10 - 100列)作为包含字符串的2D np数组.但是,似乎numpy.loadtxt()仅将浮点值作为默认值.是否可以为整个阵列指定另一种数据类型?我没试过就试过以下内容:

loadedData = np.loadtxt(address, dtype=np.str)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

/Library/Python/2.7/site-packages/numpy-1.8.0.dev_20224ea_20121123-py2.7-macosx-10.8-x86_64.egg/numpy/lib/npyio.pyc in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin)
    833             fh.close()
    834
--> 835     X = np.array(X, dtype)
    836     # Multicolumn data are returned with shape (1, N, M), i.e.
    837     # (1, 1, M) for a single row - remove the singleton dimension there

ValueError: cannot set an array element with a sequence
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?(我事先不知道我文件中的确切列数.)

Hoo*_*ked 40

请genfromtxt改用.这是一种比以下更通用的方法loadtxt:

import numpy as np
print np.genfromtxt('col.txt',dtype='str')
Run Code Online (Sandbox Code Playgroud)

使用文件col.txt:

foo bar
cat dog
man wine
Run Code Online (Sandbox Code Playgroud)

这给出了:

[['foo' 'bar']
 ['cat' 'dog']
 ['man' 'wine']]
Run Code Online (Sandbox Code Playgroud)

如果您希望每行具有相同的列数,请读取第一行并设置该属性filling_values以修复任何缺失的行.


Ale*_*mes 15

还有read_csv在熊猫,这是快速并通过柱支持非逗号柱分离器和自动打字:

import pandas as pd
df = pd.read_csv('your_file',sep='\t')
Run Code Online (Sandbox Code Playgroud)

如果您喜欢该类型,它可以转换为NumPy数组:

import numpy as np
arr = np.array(df)
Run Code Online (Sandbox Code Playgroud)

这是迄今为止我遇到的最简单,最成熟的文本导入方法.