np.genfromtxt returns 列表,不是数组
np.genfromtxt returns a list, not an array
我正在使用 np.genfromtxt()
读取一系列逗号分隔的文本文件并加载到 NumPy 数组中进行下游处理(并最终写入 HDF5)。
当有 4(或更多)行(1 header、2+ 数据行、1 页脚)时,代码工作正常(returns 数组)。阅读 4 行后检查 array.shape 得到 (2, )
。 (不读第一行和最后一行)
当我只有 3 行(1 header、1 条数据行、1 个页脚)时,我不明白返回的是什么。检查 array.shape 得到 ()
,当我打印数组时,没有括号 []
。我认为这是一个列表。当np.genfromtxt()
只找到一行数据时,如何获取数组?
我创建了一个示例来模拟 2 个简单文件的行为。 (数据和输出遵循源代码)。
注意:字段名称和数据类型用 np.dtype.
定义 我用 skip_header=1, skip_footer=1
跳过第一行和最后一行,用 usecols=()
只读一些列。
import numpy as np
import glob
dsp_dt = np.dtype ( [('H','S2'), ('YYMMDD',int),
('NAME','S40'), ('COUNT',int)] )
for dsp_name in glob.glob('data_2019-10-*.txt'):
print(dsp_name)
dsp_recarr = np.genfromtxt(dsp_name, delimiter=',', dtype=dsp_dt,
skip_header=1, skip_footer=1, usecols=(1,2,3),
names=None, encoding=None)
print(dsp_recarr.dtype)
print(dsp_recarr.shape)
print(dsp_recarr)
文件:data_2019-10-01.txt
H,YYMMDD,NAME,COUNT
S,191001,NAME_1,13
S,191001,Overall,13
F,191001
文件:data_2019-10-02.txt
H,YYMMDD,NAME,COUNT
D,191002,NODATA,0
F,191002
输出:
data_2019-10-01.txt
[('YYMMDD', '<i4'), ('NAME', 'S40'), ('COUNT', '<i4')]
(2,)
[(191001, b'NAME_1', 13) (191001, b'Overall', 13)]
data_2019-10-02.txt
[('YYMMDD', '<i4'), ('NAME', 'S40'), ('COUNT', '<i4')]
()
(191002, b'NODATA', 0)
In [92]: dsp_dt = np.dtype ( [('H','S2'), ('YYMMDD',int),
...: ('NAME','S40'), ('COUNT',int)] )
In [93]: txt="""H,YYMMDD,NAME,COUNT
...: S,191001,NAME_1,13
...: S,191001,Overall,13
...: F,191001"""
In [94]:
In [94]: dsp_recarr = np.genfromtxt(txt.splitlines(), delimiter=',', dtype=dsp_dt,
...: skip_header=1, skip_footer=1, usecols=(1,2,3),
...: names=None, encoding=None)
In [95]: dsp_recarr
Out[95]:
array([(191001, b'NAME_1', 13), (191001, b'Overall', 13)],
dtype=[('YYMMDD', '<i8'), ('NAME', 'S40'), ('COUNT', '<i8')])
In [96]: _.shape
Out[96]: (2,)
只有一根数据线:
In [97]: dsp_recarr = np.genfromtxt(txt.splitlines(), delimiter=',', dtype=dsp_dt,
...: skip_header=1, skip_footer=2, usecols=(1,2,3),
...: names=None, encoding=None)
In [98]: dsp_recarr
Out[98]:
array((191001, b'NAME_1', 13),
dtype=[('YYMMDD', '<i8'), ('NAME', 'S40'), ('COUNT', '<i8')])
In [99]: _.shape
Out[99]: ()
In [100]: print(dsp_recarr)
(191001, b'NAME_1', 13)
loadtxt
有一个 ndim
,我在 genfromtxt
中没有看到对应项。
整形后:
In [107]: dsp_recarr.reshape(1)
Out[107]:
array([(191001, b'NAME_1', 13)],
dtype=[('YYMMDD', '<i8'), ('NAME', 'S40'), ('COUNT', '<i8')])
In [108]: print(dsp_recarr.reshape(1))
[(191001, b'NAME_1', 13)]
我正在使用 np.genfromtxt()
读取一系列逗号分隔的文本文件并加载到 NumPy 数组中进行下游处理(并最终写入 HDF5)。
当有 4(或更多)行(1 header、2+ 数据行、1 页脚)时,代码工作正常(returns 数组)。阅读 4 行后检查 array.shape 得到 (2, )
。 (不读第一行和最后一行)
当我只有 3 行(1 header、1 条数据行、1 个页脚)时,我不明白返回的是什么。检查 array.shape 得到 ()
,当我打印数组时,没有括号 []
。我认为这是一个列表。当np.genfromtxt()
只找到一行数据时,如何获取数组?
我创建了一个示例来模拟 2 个简单文件的行为。 (数据和输出遵循源代码)。
注意:字段名称和数据类型用 np.dtype.
定义 我用 skip_header=1, skip_footer=1
跳过第一行和最后一行,用 usecols=()
只读一些列。
import numpy as np
import glob
dsp_dt = np.dtype ( [('H','S2'), ('YYMMDD',int),
('NAME','S40'), ('COUNT',int)] )
for dsp_name in glob.glob('data_2019-10-*.txt'):
print(dsp_name)
dsp_recarr = np.genfromtxt(dsp_name, delimiter=',', dtype=dsp_dt,
skip_header=1, skip_footer=1, usecols=(1,2,3),
names=None, encoding=None)
print(dsp_recarr.dtype)
print(dsp_recarr.shape)
print(dsp_recarr)
文件:data_2019-10-01.txt
H,YYMMDD,NAME,COUNT
S,191001,NAME_1,13
S,191001,Overall,13
F,191001
文件:data_2019-10-02.txt
H,YYMMDD,NAME,COUNT
D,191002,NODATA,0
F,191002
输出:
data_2019-10-01.txt
[('YYMMDD', '<i4'), ('NAME', 'S40'), ('COUNT', '<i4')]
(2,)
[(191001, b'NAME_1', 13) (191001, b'Overall', 13)]
data_2019-10-02.txt
[('YYMMDD', '<i4'), ('NAME', 'S40'), ('COUNT', '<i4')]
()
(191002, b'NODATA', 0)
In [92]: dsp_dt = np.dtype ( [('H','S2'), ('YYMMDD',int),
...: ('NAME','S40'), ('COUNT',int)] )
In [93]: txt="""H,YYMMDD,NAME,COUNT
...: S,191001,NAME_1,13
...: S,191001,Overall,13
...: F,191001"""
In [94]:
In [94]: dsp_recarr = np.genfromtxt(txt.splitlines(), delimiter=',', dtype=dsp_dt,
...: skip_header=1, skip_footer=1, usecols=(1,2,3),
...: names=None, encoding=None)
In [95]: dsp_recarr
Out[95]:
array([(191001, b'NAME_1', 13), (191001, b'Overall', 13)],
dtype=[('YYMMDD', '<i8'), ('NAME', 'S40'), ('COUNT', '<i8')])
In [96]: _.shape
Out[96]: (2,)
只有一根数据线:
In [97]: dsp_recarr = np.genfromtxt(txt.splitlines(), delimiter=',', dtype=dsp_dt,
...: skip_header=1, skip_footer=2, usecols=(1,2,3),
...: names=None, encoding=None)
In [98]: dsp_recarr
Out[98]:
array((191001, b'NAME_1', 13),
dtype=[('YYMMDD', '<i8'), ('NAME', 'S40'), ('COUNT', '<i8')])
In [99]: _.shape
Out[99]: ()
In [100]: print(dsp_recarr)
(191001, b'NAME_1', 13)
loadtxt
有一个 ndim
,我在 genfromtxt
中没有看到对应项。
整形后:
In [107]: dsp_recarr.reshape(1)
Out[107]:
array([(191001, b'NAME_1', 13)],
dtype=[('YYMMDD', '<i8'), ('NAME', 'S40'), ('COUNT', '<i8')])
In [108]: print(dsp_recarr.reshape(1))
[(191001, b'NAME_1', 13)]