Python 如何将df中的双引号向量转换为numpy数组?
我有以下csv文件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]'] 它将向量解析为字符串而
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)