Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将df中的双引号向量转换为numpy数组?_Python_Pandas_Numpy - Fatal编程技术网

Python 如何将df中的双引号向量转换为numpy数组?

Python 如何将df中的双引号向量转换为numpy数组?,python,pandas,numpy,Python,Pandas,Numpy,我有以下csv文件 index, vector, label 0, "[0,5,7]", class1 0, "[3,8,10]", class2 0, "[3,8,15]", class2 0, "[3,2,1]", class1 我想解析并获取向量列,如: [[0,5,7],[3,8,10],[3,8,15],[3,2,1]] 但是,无论我尝试了什么,我都会得到一个对象,如: ['[0,5,7]','[3,8,10]','[3,8,15]','[3,2,1]'] 它将向量解析为字符串而

我有以下csv文件

index, vector, label
0, "[0,5,7]", class1
0, "[3,8,10]", class2
0, "[3,8,15]", class2
0, "[3,2,1]", class1
我想解析并获取向量列,如:

[[0,5,7],[3,8,10],[3,8,15],[3,2,1]]
但是,无论我尝试了什么,我都会得到一个对象,如:

['[0,5,7]','[3,8,10]','[3,8,15]','[3,2,1]']
它将向量解析为字符串而不是数组

我试图将其转换为list/np.array,但没有一个成功。我还尝试应用以下内容来转义引号:

replace.replace("'",'')
replace.replace('"','')
它们根本没有任何效果


因此,我欢迎您提出更多建议。

您可以将
csv
模块和
json
模块结合起来进行如下解析:

代码: 使用熊猫: 这可以翻译为熊猫:

df = pd.read_csv('output.csv', skipinitialspace=True,
                 converters={'vector': lambda x: json.loads(x)})
结果: 以及:


假设数据帧中已经有它,可以应用一个函数将其转换为列表/数组

import numpy as np
def string_list(x): # '[1,2,3]'
    x = x[1:-1]
    x = x.split(",")
    x = list(map(np.float,x)) # [1,2,3]
    return x
然后将此函数应用于数据帧

import pandas as pd
df = df.DataFrame.from_csv("file.csv")
df['vector'] = df['vector'].apply(string_list)

感谢您的反馈,您的代码实际上正在对值进行四舍五入,而且我得到了以下结果:
数组([list([0.0,1]),列表([0.0,0.0,0.0,0.0,0.0]))
,这不是我所期待的,我为迟来的回复感到抱歉。我稍微修改了代码。希望它能起作用。非常感谢,它能起作用,这正是我想要的。通过使用pandas数据帧而不是常规的csv读取,我们可以得到相同的结果吗?
   index      vector   label
0      0   [0, 5, 7]  class1
1      0  [3, 8, 10]  class2
2      0  [3, 8, 15]  class2
3      0   [3, 2, 1]  class1
import numpy as np
def string_list(x): # '[1,2,3]'
    x = x[1:-1]
    x = x.split(",")
    x = list(map(np.float,x)) # [1,2,3]
    return x
import pandas as pd
df = df.DataFrame.from_csv("file.csv")
df['vector'] = df['vector'].apply(string_list)