阵列字符串系列

时间:2017-08-11 00:52:06

标签: python arrays python-3.x pandas

我有一些图像数组,我试图运行回归,不知怎的,我将csv文件导入为一系列字符串而不是一系列数组

In: image_train = pd.read_csv('image_train_data.csv')
In: image_train['image_array'].head()
Out: 0    [73 77 58 71 68 50 77 69 44 120 116 83 125 120...
     1    [7 5 8 7 5 8 5 4 6 7 4 7 11 5 9 11 5 9 17 11 1...
     2    [169 122 65 131 108 75 193 196 192 218 221 222...
     3    [154 179 152 159 183 157 165 189 162 174 199 1...
     4    [216 195 180 201 178 160 210 184 164 212 188 1...
     Name: image_array, dtype: object

当我尝试使用image_train运行回归时(' image_array')我得到了

ValueError: could not convert string to float: '[255 255 255 255 255 255 255 255...

数组是一个字符串。

有没有办法将字符串转换为整个系列的数组?

2 个答案:

答案 0 :(得分:4)

您可以使用converters来描述您希望如何阅读该字段。最简单的方法是定义您自己的转换器,将该列视为list,例如:

import ast
def conv(x):
    return ast.literal_eval(','.join(x.split(' ')))

image_train = pd.read_csv('image_train_data.csv', converters={'image_array':conv})

答案 1 :(得分:1)

虽然AChampion的解决方案看起来不错,但我继续寻找另一种解决方案:

image_train['image_array'].str.findall(r'\d+').apply(lambda x: map(int, x))

如果你已经加载它并且不想/不能再次加载它,那将是有用的。

这是另一个适用于评估列表的文字字符串表示的解决方案:

pd.eval(image_train['image_array'])

但是,如果用空格分隔,你可以这样做:

pd.eval(image_train['image_array'].str.replace(' ', ','))