从“.npy”文件直接读取数据到数组中

2024-04-19 08:40:59 发布

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

这也许是个愚蠢的问题,但我似乎找不到答案。我有一个以前用np.save保存的大数组,现在我想将数据加载到一个新文件中,从每个列创建一个单独的列表。唯一的问题是我的大数组中的一些行只有一个nan值,所以数组看起来像这样(作为一个非常简化的例子):

np.array([[5,12,3], 
          [nan], 
          [10,13,9],
          [nan],
          [nan]])

我可以使用for循环来实现我想要的,但我想知道是否有比这更好的方法:

^{pr2}$

我想要的输出如下:

depth = [5,nan,10,nan,nan]
upper = [12,nan,13,nan,nan]
lower = [3,nan,9,nan,nan]

谢谢你的帮助!我知道我应该事先修改创建数据.npy“文件,这样它每行的列数都相同,但该代码已经运行数小时,我宁愿避免这种情况!在


Tags: 文件数据方法答案列表forsavenp
2条回答

对于可变长度的子数组,这是dtype=object数组。在大多数情况下,这与这些子阵列的列表相同。所以大多数行动都需要迭代。在

你行动的一个变体就是清单理解

In [61]: dd=[[nan,nan,nan] if len(i)==1 else i for i in d]

In [62]: dd
Out[62]: [[5, 12, 3], [nan, nan, nan], [10, 13, 9], [nan, nan, nan], [nan, nan, nan]]

三个目标数组是以下列:

^{pr2}$

另一种方法是用nan填充该类型的数组,然后复制非nan值。但这也需要迭代来找到子数组的长度。在

^{3}$

np.nan是float,因此带有nan的2d数组将是dtype float。在

使用熊猫的较短方法:

import numpy as np
import pandas as pd

data = np.array([[5,12,3], [np.nan], [10,13,9], [np.nan], [np.nan]])
df = pd.DataFrame.from_records(data.tolist())
df.columns = ['depth','upper','lower']

输出:

^{pr2}$

现在可以对每个列进行寻址以获得所需的输出

^{3}$

如果您需要列表:

>>> df.depth.tolist()
[5.0, nan, 10.0, nan, nan]

相关问题 更多 >