#python #pandas #dataframe #numpy #data-preprocessing
Вопрос:
пожалуйста, я работаю над проектом, и мне нужно выполнить некоторую предварительную обработку данных, у меня есть фрейм данных, который выглядит так (это просто пример для упрощения
index | pixels
0 | 10 20 30 40
1 | 11 12 13 14
и я хочу преобразовать его в массив np формы (2,2,2,1)
. Тип столбца пикселей-объект
. Есть ли какое-либо решение для этого без циклов, потому что у меня есть фрейм данных с 28 тыс. строк с большими изображениями ?
я пробовал зацикливаться, но на моей машине выполнение занимает так много времени
Комментарии:
1. здесь изменение формы (2,2,2,1) работает, потому что у вас 2 строки, но какой конечный результат вы хотите получить с 28 тысячами строк?
2. Этот фрейм данных сбивает с толку. Какой тип данных представляет
pixels
собой столбец? это что, массивы? списки? струны?3. Отображение панд (а тем более упрощение) мало что говорит нам об элементах столбца, будь то строки, списки или массивы.
arr=df.to_numpy()
может быть, это будет более информативно. Но строки для numpy часто неудобны.pandas
может быть способ «разбить» столбец на несколько столбцов.4. @Ben. T для фрейма данных с 28 тысячами строк, и каждая строка содержит строку, скажем, из 25 чисел, я хочу получить массив np формы (28k,5,5,1)
5. @HenryEcker
pixels
это строка чисел , разделенных 1 пробелом, каждое число представляет один пиксель вот так : «10 20 30 40», я надеюсь, что это более понятно, как это
Ответ №1:
Воспользуйся str.split
astype
to_numpy
reshape
:
a = (
df['pixels'].str.split(' ', expand=True)
.astype(int).to_numpy()
.reshape((2, 2, 2, 1))
)
a
:
[[[[10]
[20]]
[[30]
[40]]]
[[[11]
[12]]
[[13]
[14]]]]
Полный Рабочий Пример:
import pandas as pd
df = pd.DataFrame({'pixels': ['10 20 30 40', '11 12 13 14']})
a = (
df['pixels'].str.split(' ', expand=True)
.astype(int).to_numpy()
.reshape((2, 2, 2, 1))
)
print(a)