我用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',我错过了什么?有什么想法可以让它工作吗?
帮助将不胜感激。
2条答案
按热度按时间8yparm6h1#
像这样的东西应该可以让你去那里。
请注意,
literal_eval
非常不安全,不应该使用未经检查的用户输入来调用它。关于这一点:为什么要这样保存数据呢?数值数组最好通过
np.save
存储,或者--如果你坚持使用人类可读的csv --作为 Dataframe 中的一列,如下所示:df['Feature5'] = pd.Series(data)
如果你的数据是真实的RGBA图像数据,我建议通过
np.save
将图像保存为PNG或numpy数组,并在csv中存储一个文件名。juud5qan2#
@Robert谢谢你的快速回答,看起来很有效,我现在正在尝试把数据做成正确的形状,目前数据的形状是(288968,4),我不知道为什么,我会期望(999* 288,4),因为Feature 5有999行,数组的形状是(288,4),你能给我解释一下为什么形状和我期望的不一样吗?
我想你是对的。我应该用一种更好的方式保存numpy数组,避免字符串转换。我这样做的原因是我使用的所有数据都在一个大的excel文件中。我认为把我使用的所有数据都保存在一个文件中会很好。我没有看到numpy字符串转换的问题。numpy数组与excel文件中的行有关。不知道如何确保这将所有排队的权利与两个文件。我只工作的值1像素从一个图像,而不是整个图像。