Как преобразовать фрейм данных из 1 столбца в 8 столбцов

Как я могу преобразовать массив фреймов данных с 1 столбцом (в python) в фрейм данных с 8 столбцами?

Я попытался использовать функцию изменения формы Numpy следующим образом:

    data = []
    for x in range(0, 24):
        data.append(x)

    df = pd.DataFrame(data)
    reshaped = pd.DataFrame(np.reshape(df.columns.to_numpy(), (1, 8)), columns=["Heading1", "Heading2", "Heading3", "Heading4", "Heading5", "Heading6", "Heading7", "Heading8"])

но при этом я получаю следующую ошибку:

ValueError: cannot reshape array of size 1 into shape (8)

Итак, я ожидаю вывода 3 ряда x 8 столбцов чисел от 0 до 24

Есть ли у вас какие-либо предложения?

Как выглядит data или df?

JNevill 05.05.2022 16:20

Здравствуйте, @JNevil. Я обновил код. Вы видите, что данные — это просто массив чисел. 1 столбец из 24 цифр. Мне нужно поместить это в фрейм данных с 8 столбцами

Kiro777 05.05.2022 16:27

Это полезно. Чего от этого хотят? 3 строки по 8 столбцов?

JNevill 05.05.2022 16:31

Подсказка: попробуйте проверить результат df.columns.to_numpy(), а затем результат df.columns. Затем найдите документацию для DataFrame.columns. Подсказка 2: .to_numpy также предоставляется самим DataFrame. Подсказка 3: где код говорит (1, 8), что это означает? Как это связано с предполагаемой новой формой данных? (Подсказка: 1 * 8 равно 24?)

Karl Knechtel 05.05.2022 16:34

Пожалуйста, попробуйте поставить диагноз проблем перед публикацией. Мой первый намек возникает естественным образом из шагов, которые вы должны знать, как предпринять без подсказок. Мой второй намек вытекает из идеи поиск соответствующей документации, например, с помощью поисковой системы.

Karl Knechtel 05.05.2022 16:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
29
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я делаю некоторые предположения о том, что вам нужно, а именно 8 столбцов с 3 строками, где ваш исходный диапазон последовательно распределяется по новым более коротким строкам.

reshaped = pd.DataFrame(np.reshape(df.to_numpy(), (3, 8)), columns=["Heading1", "Heading2", "Heading3", "Heading4", "Heading5", "Heading6", "Heading7", "Heading8"])

   Heading1  Heading2  Heading3  Heading4  Heading5  Heading6  Heading7  \
0         0         1         2         3         4         5         6   
1         8         9        10        11        12        13        14   
2        16        17        18        19        20        21        22   

   Heading8  
0         7  
1        15  
2        23 

Здесь две большие разницы:

  1. Нам не нужен пустой массив, состоящий из столбцов фрейма данных. Нам нужен один из всего кадра данных 1x24. Так что просто df.to_numpy()
  2. Форма выходного измененного массива numpy должна иметь тот же множитель, что и исходный 1*24 != 1*8, вместо этого нам нужен массив размером 3 на 8.
Ответ принят как подходящий

Попробуй это:

data = np.arange(24)
df = pd.DataFrame(data, columns=['value'])

new_data = np.array(df['value']).reshape(-1, 8)

new_df = pd.DataFrame(new_data)
new_df.columns = ["Heading1", "Heading2", "Heading3", "Heading4", "Heading5", "Heading6", "Heading7", "Heading8"]

Выход:


Heading1    Heading2    Heading3    Heading4    Heading5    Heading6    Heading7    Heading8
0   0   1   2   3   4   5   6   7
1   8   9   10  11  12  13  14  15
2   16  17  18  19  20  21  22  23

Привет @D.Manasreh - я пробовал это, но получаю AttributeError: модуль «numpy» не имеет атрибута «упорядочить»

Kiro777 05.05.2022 16:52

должно быть arange не arrange. Но в любом случае это не главное, эта строка просто создает данные вместо цикла. Очки находятся в следующих строках.

D.Manasreh 05.05.2022 16:53

Спасибо, но что такое df['value'] - что входит в ['value']? ??

Kiro777 05.05.2022 17:03

Я просто назвал столбец «значение», чтобы его было легко вызывать. Это просто имя столбца, который вы хотите изменить из исходного фрейма данных.

D.Manasreh 05.05.2022 17:06

Большое спасибо @D.Manasreh. Я просто немного изменил ваш код, чтобы он соответствовал моим потребностям. но мне нравится простота и ясность вашего стиля кодирования.

Kiro777 05.05.2022 18:10

Другие вопросы по теме