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

时间:2017-11-16 05:43:10

标签: 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]']

它将向量解析为字符串而不是数组。

我试图把它投射到list / np.array但没有一个工作。我还尝试应用以下内容以逃避引用:

replace.replace("'",'')
replace.replace('"','')

他们根本没有任何影响。

因此,我建议您尝试更多。

2 个答案:

答案 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:

这可以转换为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)