numpy 数组在写入文件时更改为字符串

问题描述 投票:0回答:2

我有一个数据框,其中一列是 numpy 数组:

 DF

      Name                     Vec
 0  Abenakiite-(Ce) [0.0, 0.0, 0.0, 0.0, 0.0, 0.043, 0.0, 0.478, 0...
 1  Abernathyite    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
 2  Abhurite        [0.176, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.235, 0...
 3  Abswurmbachite  [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.0,...

当我检查每个元素的数据类型时,会返回正确的数据类型。

 type(DF['Vec'].iloc[1])
 numpy.ndarray

我将其保存到 csv 文件中:

DF.to_csv('.\\file.csv',sep='\t')

现在,当我再次阅读该文件时,

new_DF=pd.read_csv('.\\file.csv',sep='\t')

并检查索引 1 处 Vec 的数据类型:

type(new_DF['Vec'].iloc[1])   
str

numpy 数组的大小为 1x127。

数据类型已从 numpy 数组更改为字符串。我还可以在各个向量中看到一些新的行元素。我认为这可能是由于将向量写入 csv 时出现一些问题,但我不知道如何修复它。有人可以帮忙吗?

谢谢!

pandas file numpy type-conversion
2个回答
7
投票

在评论中我犯了一个错误,说的是

dtype
而不是
converters
。您想要的是在使用函数读取它们时对其进行转换。使用一些虚拟变量:

df=pd.DataFrame({'name':['name1','name2'],'Vec':[np.array([1,2]),np.array([3,4])]})
df.to_csv('tmp.csv')
def converter(instr):
    return np.fromstring(instr[1:-1],sep=' ')
df1=pd.read_csv('tmp.csv',converters={'Vec':converter})
df1.iloc[0,2]
array([1., 2.])

0
投票

上面的答案有效。 如果得到空列表,请添加列表切片 [1:-1] !

这会转换字符串 [-2.0797753、3.6340227、-1.7011836]

到 -2.0797753、3.6340227、-1.7011836

这是 np.fromstring 所需的格式 https://numpy.org/doc/stable/reference/ generated/numpy.fromstring.html

© www.soinside.com 2019 - 2024. All rights reserved.