csv Pandas:如何将数据作为np.array读取

np8igboo  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(166)

我有一个.tsv文件,如下所示:
| 序列|标号|
| - -|- -|
| [[0.0,1.0、0.0、0.0]、[0.0、0.0、1.0、0.0]、[0.0、0.0、1.0、0.0]、[0.0、0.0、1.0、0.0]、[0.0、0.0、1.0、0.0]、[0.0、0.0、1.0、0.0]]|一个|
我想将pd.DataFrame中的列sequences导入为np.float64
但事实是这样的:

df = pd.read_csv('AARS.tsv', sep='\t', dtype = np.float64)

ValueError: could not convert string to float

如果你能给予我任何建议,我将不胜感激!
非常感谢!

3wabscal

3wabscal1#

第一列看起来不像是float64
您可以省略dtype=...,并检查数据的类型:

import pandas as pd 
import numpy as np

df = pd.read_csv('aars.tsv', sep='\t', usecols=['label','sequence'])

for item in df.values:
    for i in range(item.size):
       print(type(item[i]), end=" ")
    print()

这将输出如下所示的内容(当我创建正确的输入时,我添加了一行列标题):

<class 'str'> <class 'int'>
raogr8fs

raogr8fs2#

下面是一个用PandasStringMethodspandas.Series.explode做的命题:

import pandas as pd

out= (
        pd.read_csv("AARS.tsv", sep="\t", usecols=["sequences"])
            .assign(temp= lambda x: x["sequences"].str.strip("[]")
                                                  .str.replace("\]\s*,\s*\[", ", ",
                                                               regex=True)
                                                  .str.split(","))
                                                  .explode("temp")
                                                  .astype(float)
                                                  .values
     )
#输出:
print(out)

[[0.]
 [1.]
 [0.]
 [0.]
 [0.]
 [0.]
 [1.]
 [0.]
 [0.]
 [0.]
 [1.]
 [0.]
 [0.]
 [0.]
 [1.]
 [0.]
 [0.]
 [0.]
 [1.]
 [0.]
 [0.]
 [0.]
 [1.]
 [0.]]

print(type(out)

numpy.ndarray

如果您需要将数组重新调整为2D,请使用numpy.reshape

print(np.reshape(out, (-1, 2)))

[[0. 1.]
 [0. 0.]
 [0. 0.]
 [1. 0.]
 [0. 0.]
 [1. 0.]
 [0. 0.]
 [1. 0.]
 [0. 0.]
 [1. 0.]
 [0. 0.]
 [1. 0.]]

相关问题