Как получить массив или список из фрейма данных (в котором python читается как тип формата str)? - PullRequest
2 голосов
/ 02 июня 2019

У меня есть фрейм данных, в котором python читает столбцы в каждой строке типа str. Но на самом деле это список или массив. Как я хочу получить мой массив из формата str?

Я уже пытаюсь разделить функцию, но она выдаёт странный вывод.

Не могу опубликовать изображения из-за низкой репутации

Допустим, это мой фрейм данных (НЕ АКТУАЛЬНЫЕ ДАННЫЕ)

enter image description here

df = pd.DataFrame({'Weight':[str([45, 88, 56]), str([15, 71, 62])], 
                   'Name':[str(['Sam', 'Andrea', 'Alex']), str(['Robin', 'Kia', 'Lina'])], 
                   'Age':[str([14, 25, 55]), str([8, 21, 30])]}) 

Если мы проверим формат первой строки и первых столбцов в формате str

type(df['Weight'][0])
>> str

Если мы используем функцию разделения, я получаю,

pd.DataFrame(np.column_stack((df['Weight'][0].split(), df['Age'][0].split())))
>> array([['[45,', '[14,'],
       ['88,', '25,'],
       ['56]', '55]']], dtype='<U4')

enter image description here

Мой ожидаемый вывод - получить массив.

enter image description here

array([45, 88, 56], dtype=int64)

Я все еще новичок в питоне. Это самая быстрая функция, которая уже встроена в python, вместо того, чтобы заменить [ , ] на ноль.

Ответы [ 2 ]

2 голосов
/ 02 июня 2019

возможно, вы можете попробовать этот способ, используя ast module, превратить строку в список и установить список в np.array.

import ast
df = pd.DataFrame({'Weight':[str([45, 88, 56]), str([15, 71, 62])], 
                   'Name':[str(['Sam', 'Andrea', 'Alex']), str(['Robin', 'Kia', 'Lina'])], 
                   'Age':[str([14, 25, 55]), str([8, 21, 30])]}) 

a = np.array(ast.literal_eval(df['Weight'][0]))
b = np.array(ast.literal_eval(df['Age'][0]))
pd.DataFrame(np.column_stack((a, b)))
0 голосов
/ 02 июня 2019

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

Это может выглядеть так:

df = pd.DataFrame({'Weight':[str([45, 88, 56]), str([15, 71, 62])], 
                   'Name':[str(['Sam', 'Andrea', 'Alex']), str(['Robin', 'Kia', 'Lina'])], 
                   'Age':[str([14, 25, 55]), str([8, 21, 30])]}) 



df['Weight'] = [x.split('[')[1].split(']')[0].split(',') for x in df['Weight']]
df['Name'] = [x.split('[')[1].split(']')[0].split(',') for x in df['Name']]
df['Age'] = [x.split('[')[1].split(']')[0].split(',') for x in df['Age']]

In [1] : type(df['Weight'][0])
Out[1] : list

И если вы хотите использовать массив Numpy вместо списка, вы можете изменить свое понимание списка на:

df['Weight'] = [np.array(x.split('[')[1].split(']')[0].split(',')) for x in df['Weight']]
df['Name'] = [np.array(x.split('[')[1].split(']')[0].split(',')) for x in df['Name']]
df['Age'] = [np.array(x.split('[')[1].split(']')[0].split(',')) for x in df['Age']]

In [1] : type(df['Weight'][0])
Out[1] : numpy.ndarray
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...