【发布时间】:2018-11-28 18:22:23
【问题描述】:
我有一个数据框,其中一列是一个 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 时出现了一些问题,但我不知道如何修复它。有人可以帮忙吗?
谢谢!
【问题讨论】:
-
有关数据类型的信息不会保存到 CSV 文件中。 Pandas CSV 阅读器无法知道您尝试阅读的内容在过去是一个 NumPy 数组。您应该将数组单独保存为 .npy 文件,或者自己将字符串转换回数组。
-
您应该在
read_csv中使用dtype。在documentation中提到了 -
您还能期待什么。 csv是文本文件吗?数组的字符串格式,例如
'[0 1 2]'是它可以写第二列的唯一方法。它不能编写数组的某种二进制表示形式(可能使用pickle.dumps除外)。查看csv文件(使用任何文本查看器)。 -
我将 read_csv 命令更改为: new_DF=pd.read_csv('.\\file.csv',sep='\t',dtype={'Vec':np.ndarray}) 但是,新的错误是:dtype
not理解 -
dtype指的是数组的元素,而不是整个数组的type。我不认为read_csv可以处理这种类型的输入。尽管在数据帧中处理这些字符串是可能的。
标签: pandas file numpy type-conversion