инкапсулированные массивы str для массива с пандами - PullRequest
0 голосов
/ 01 октября 2018

Я работаю с фреймом данных, который содержит массивы.После read_cvs панды, кажется, хранят мои векторы в режиме str.Например:

df['column'].iloc[3]
>>>'[50.6402809, 4.6667145]'

type(df['column'].iloc[3])
>>> str

Как мне преобразовать весь столбец в массив?Вот так:

df['column'].iloc[3]
>>>[50.6402809, 4.6667145]

type(df['column'].iloc[3])
>>> array

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Вы можете использовать модуль ast для буквальной интерпретации строк.Однако это может быть опасно, особенно при чтении данных из файла или, что еще хуже, в режиме онлайн.

Альтернативой может быть непосредственный анализ файла с использованием series.str функций:

In [19]: parsed = (
    ...:     df['column']
    ...:     .str.strip('[]')
    ...:     .str.split(', ', )
    ...:     .apply(lambda x: np.array(x).astype(float)))
    ...:

In [20]: parsed
Out[20]:
0    [0.45482146988492345, 0.40132331304489344]
1      [0.4820128044982769, 0.6930103661982894]
2      [0.15845986027370507, 0.825879918750825]
3      [0.08389109330674027, 0.031864037778777]
Name: column, dtype: object
0 голосов
/ 01 октября 2018

Если хотите, чтобы массивы были пустыми, используйте лямбда-функцию с ast.literal_eval и конвертируйте в массивы:

import ast

df['column'] = df['column'].apply(lambda x: np.array(ast.literal_eval(x)))

А если нужны списки:

df['column'] = df['column'].apply(ast.literal_eval)

df['column'] = [ast.literal_eval(x) for x in df['column']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...