Как я могу преобразовать массив фреймов данных с 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
Есть ли у вас какие-либо предложения?
Здравствуйте, @JNevil. Я обновил код. Вы видите, что данные — это просто массив чисел. 1 столбец из 24 цифр. Мне нужно поместить это в фрейм данных с 8 столбцами
Это полезно. Чего от этого хотят? 3 строки по 8 столбцов?
Подсказка: попробуйте проверить результат df.columns.to_numpy()
, а затем результат df.columns
. Затем найдите документацию для DataFrame.columns
. Подсказка 2: .to_numpy
также предоставляется самим DataFrame. Подсказка 3: где код говорит (1, 8)
, что это означает? Как это связано с предполагаемой новой формой данных? (Подсказка: 1 * 8 равно 24?)
Пожалуйста, попробуйте поставить диагноз проблем перед публикацией. Мой первый намек возникает естественным образом из шагов, которые вы должны знать, как предпринять без подсказок. Мой второй намек вытекает из идеи поиск соответствующей документации, например, с помощью поисковой системы.
Я делаю некоторые предположения о том, что вам нужно, а именно 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
Здесь две большие разницы:
df.to_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» не имеет атрибута «упорядочить»
должно быть arange
не arrange
. Но в любом случае это не главное, эта строка просто создает данные вместо цикла. Очки находятся в следующих строках.
Спасибо, но что такое df['value'] - что входит в ['value']? ??
Я просто назвал столбец «значение», чтобы его было легко вызывать. Это просто имя столбца, который вы хотите изменить из исходного фрейма данных.
Большое спасибо @D.Manasreh. Я просто немного изменил ваш код, чтобы он соответствовал моим потребностям. но мне нравится простота и ясность вашего стиля кодирования.
Как выглядит
data
илиdf
?