Преобразование столбцов строки в список в пандах - PullRequest
0 голосов
/ 10 мая 2018

У меня проблема с типом одного из моих столбцов в кадре данных pandas. В основном столбец сохраняется в CSV-файле в виде строки, и я хочу использовать его в качестве кортежа, чтобы иметь возможность преобразовать его в список чисел. Ниже приведен очень простой CSV:

ID,LABELS
1,"(1.0,2.0,2.0,3.0,3.0,1.0,4.0)"
2,"(1.0,2.0,2.0,3.0,3.0,1.0,4.0)"

Если загрузить его с помощью функции «read_csv», я получу список строк. Я пытался преобразовать в список, но я получаю версию списка:

df.LABELS.apply(lambda x: list(x))

возвращается:

['(','1','.','0',.,.,.,.,.,'4','.','0',')']

Есть идеи, как это сделать?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Вы можете использовать ast.literal_eval, что даст вам кортеж:

import ast
df.LABELS = df.LABELS.apply(ast.literal_eval)

Если вы действительно хотите список, используйте:

df.LABELS.apply(lambda s: list(ast.literal_eval(s)))
0 голосов
/ 10 мая 2018

Используйте str.strip и str.split:

df['LABELS'] = df['LABELS'].str.strip('()').str.split(',')

Но если нет NaN с здесь, list comprehension тоже неплохо работает:

df['LABELS'] = [x.strip('()').split(',') for x in df['LABELS']]
0 голосов
/ 10 мая 2018

Вы можете попробовать это (при условии, что ваш csv называется filename.csv):

df = pd.read_csv('filename.csv')

df['LABELS'] = df.LABELS.apply(lambda x: x.strip('()').split(','))

>>> df
   ID                               LABELS
0   1  [1.0, 2.0, 2.0, 3.0, 3.0, 1.0, 4.0]
1   2  [1.0, 2.0, 2.0, 3.0, 3.0, 1.0, 4.0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...