如何将保存在Pandascsv文件中的numpy数组转换回numpy数组?

insrf1ej  于 2023-02-23  发布在  其他
关注(0)|答案(2)|浏览(129)

我用Pandas保存了一个numpy数组到csv文件中:

df['Feature5'][i] = str(ri_RGBA.tolist())
df.to_csv(r'H:\test.csv')

csv文件具有以下结构:

Feature1,Feature2,Feature3,Feature4,Labels,Feature5
13.37,33.09,-0.08,992.2,nass,"[[1, 160, 246, 255], … ,[1, 160, 246, 255]]"
26.37,33.03,-0.08,992.2,trocken,"[[110, 160, 246, 255], … ,[20, 160, 246, 255]]"

现在我尝试将字符串“[[1,160,246,255],...”转换回numpy数组:

data = df['Feature5'].apply(lambda x: 
                           np.fromstring(
                               x.replace('\n','')
                                .replace('"','')
                                .replace('[','')
                                .replace(']','')
                                .replace('  ',' ')
                                .replace(' ',''), sep=','))

但是print(data.dtypes)仍然返回类型'object',我错过了什么?有什么想法可以让它工作吗?
帮助将不胜感激。

8yparm6h

8yparm6h1#

像这样的东西应该可以让你去那里。

import ast
my_list = ast.literal_eval(df['Feature5'][i])
data = np.array(my_list)

请注意,literal_eval非常不安全,不应该使用未经检查的用户输入来调用它。
关于这一点:为什么要这样保存数据呢?数值数组最好通过np.save存储,或者--如果你坚持使用人类可读的csv --作为 Dataframe 中的一列,如下所示:
df['Feature5'] = pd.Series(data)
如果你的数据是真实的RGBA图像数据,我建议通过np.save将图像保存为PNG或numpy数组,并在csv中存储一个文件名。

juud5qan

juud5qan2#

@Robert谢谢你的快速回答,看起来很有效,我现在正在尝试把数据做成正确的形状,目前数据的形状是(288968,4),我不知道为什么,我会期望(999* 288,4),因为Feature 5有999行,数组的形状是(288,4),你能给我解释一下为什么形状和我期望的不一样吗?

data = np.empty([288,4], int)
for i in range(999):
    my_list = ast.literal_eval(df['Feature5'][i])
    step = np.array(my_list)
    data = np.vstack([data, step]) #np.append(data, step, axis=0)
#data = np.reshape(data,(999,288,4))
print(data.shape)

我想你是对的。我应该用一种更好的方式保存numpy数组,避免字符串转换。我这样做的原因是我使用的所有数据都在一个大的excel文件中。我认为把我使用的所有数据都保存在一个文件中会很好。我没有看到numpy字符串转换的问题。numpy数组与excel文件中的行有关。不知道如何确保这将所有排队的权利与两个文件。我只工作的值1像素从一个图像,而不是整个图像。

相关问题