#pandas #dataframe #transform
#pandas #фрейм данных #преобразование
Вопрос:
У меня есть фрейм данных pandas с 20 элементами, которые я хотел бы изменить до 5 столбцов на 4 строки.
Возможно ли это с фреймом данных pandas? И тогда возможно ли сделать обратное и преобразовать полученный фрейм данных 5 * 4 в 2 * 10 или 1 * 20?
Ответ №1:
Я думаю, вы можете использовать сначала values
для преобразования в numpy array
, а затем numpy.ndarray.reshape
:
df = pd.DataFrame({'A':[1,2,3,7,7],
'B':[4,5,6,8,0],
'C':[7,8,9,7,8],
'D':[1,3,5,8,1]})
print (df)
A B C D
0 1 4 7 1
1 2 5 8 3
2 3 6 9 5
3 7 8 7 8
4 7 0 8 1
df = pd.DataFrame(df.values.reshape(4,5),columns=list('ABCDE'))
print (df)
A B C D E
0 1 4 7 1 2
1 5 8 3 3 6
2 9 5 7 8 7
3 8 7 0 8 1
print (df.values.reshape(10,2))
[[1 4]
[7 1]
[2 5]
[8 3]
[3 6]
[9 5]
[7 8]
[7 8]
[7 0]
[8 1]]
print (pd.DataFrame(df.values.reshape(10,2), columns=list('AB')))
A B
0 1 4
1 7 1
2 2 5
3 8 3
4 3 6
5 9 5
6 7 8
7 7 8
8 7 0
9 8 1
РЕДАКТИРОВАТЬ с помощью комментария:
pos = [1,5,7,8,10,8]
print (pd.DataFrame(np.array(pos).reshape(2,3),columns=list('ABC')))
A B C
0 1 5 7
1 8 10 8
Комментарии:
1. что, если вы передаете что-то вроде списка в фрейм данных, можете ли вы изменить его одновременно? Например, если pos — это мой список, я получаю сообщение об ошибке: pd.DataFrame(pos).reshape(4,5),columns=list(‘ABCDE’))
2. Я думаю, вам нужно преобразовать
list
в массив numpy с помощьюpd.DataFrame(np.array(pos).reshape(4,5),columns=list('ABCDE'))