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

bprjcwpo  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(80)

我有一个数组,其中一列是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数组更改为字符串。我还可以在各个vector中看到一些新的行元素。我认为这可能是由于将vector写入csv时出现的一些问题,但我不知道如何修复它。有人可以帮助吗?
谢谢你,谢谢

cwdobuhd

cwdobuhd1#

在注解中,我犯了一个错误,说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.])

字符串

vlju58qv

vlju58qv2#

上面的答案是有效的。如果你得到的是空列表,那么就添加列表切片[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

相关问题