разбить на несколько строк набор данных с несколькими столбцами в одной строке - pandas - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть полный набор данных, собранный только в один ряд. Этот набор данных должен иметь 7 столбцов и 360 строк.

Например, первые позиции:

df = [1, 14.02.2013, 3.305,55, 206,05, 25, 3,536,60, 349,027,78, 2, 14/03/2013, 3,299,07, 205,59, 25, 3,529,66, 348,055,56, 3, 14/04/2013, 3,292,59, 205,13, ​​25, 3,522,72, 347,083, 34, 4, 14/05/2013, 3,286,11, 204,67, 25, 3,515,78, 346,111,12, 5, 14/06/2013, 3,279,63, 204,22, 25, 3,50,84, 345.138,90]

и мне они нужны как:

  • 1, 14.02.2013, 3.305,55, 206,05, 25, 3,536,60, 349,027,78
  • 2, 14.03.2013, 3,299,07, 205,59, 25, 3,529,66, 348,055,56
  • 3, 14/04/2013, 3,292,59, 205 , 13, 25, 3,522,72, 347,083,34
  • 4, 14/05/2013, 3,286,11, 204,67, 25, 3,515,78, 346,111,12
  • 5 , 14.06.2013, 3.279,63, 204,22, 25, 3.508,84, 345.138,90

Как это сделать в python / pandas?

спасибо.

Ответы [ 3 ]

3 голосов
/ 27 февраля 2020

Вы можете использовать numpy array_split (), чтобы разделить длину списка на нужное количество столбцов.

import pandas as pd
import numpy as np

d = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]

pd.DataFrame(np.array_split(d,len(d)/7))

Вывод

    0   1   2   3   4   5   6
0   1   2   3   4   5   6   7
1   8   9  10  11  12  13  14
2  15  16  17  18  19  20  21
2 голосов
/ 27 февраля 2020

Использование zip и iter

pd.DataFrame(list(zip(*[iter(d)] * 7)))

    0   1   2   3   4   5   6
0   1   2   3   4   5   6   7
1   8   9  10  11  12  13  14
2  15  16  17  18  19  20  21

Использование np.reshape
Для этого требуется, чтобы длина d была кратна 7, в противном случае это разрывается.

pd.DataFrame(np.reshape(d, (-1, 7)))

    0   1   2   3   4   5   6
0   1   2   3   4   5   6   7
1   8   9  10  11  12  13  14
2  15  16  17  18  19  20  21

Исправить привередливый бит ... но хватит только самой последней группы 7

pd.DataFrame(np.reshape(d[:len(d) // 7 * 7], (-1, 7)))
0 голосов
/ 28 февраля 2020

Я думаю, самое простое решение - использовать изменить форму метод из Numpy. Первый параметр - -1 - создайте столько строк, сколько необходимо, второй - 7 - количество столбцов:

df = pd.DataFrame(df.values.reshape(-1, 7))

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

...