我有以下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('"','')
他们根本没有任何影响。
因此,我建议您尝试更多。
答案 0 :(得分:2)
您可以将csv
模块和json
模块组合在一起进行解析,如:
with open('test.csv', 'rU') as f:
reader = csv.reader(f, skipinitialspace=True)
header = next(reader)
column2 = [json.loads(x[1]) for x in reader]
这可以转换为pandas:
df = pd.read_csv('output.csv', skipinitialspace=True,
converters={'vector': lambda x: json.loads(x)})
[[0, 5, 7], [3, 8, 10], [3, 8, 15], [3, 2, 1]]
和
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
答案 1 :(得分:0)
假设您已经在pandas数据框中拥有它,您可以应用一个将其转换为列表/数组的函数。
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)