Разделение списка на размер N и добавление в фрейм данных приводит к отсутствию данных - PullRequest
1 голос
/ 05 ноября 2019

Я делю список на более мелкие списки размером n и пытаюсь добавить каждый новый список в DataFrame. Когда я перечисляю списки, все данные там;когда я пытаюсь поместить списки в DataFrame, первый список набора исчезает.

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

def divide_chunks(a,n):
    for i in range(0, len(a),n):
        yield a[i:i+n]


x = divide_chunks(my_list, n)
for i in x:
    print(i)

дает мне

[1, 2, 3, 4, 5]

[6, 7, 8, 9, 10]

[11, 12, 13, 14, 15]

[16, 17, 18, 19, 20]

Я хотел бы поместить это в DataFrame.

Вот как я пытаюсь это сделать

x = divide_chunks(my_list, n)

for i in x:

    emptydf = pd.DataFrame(x)

emptydf

Я бы ожидал, что результат будет как выше, но вместо этого я пропускаю список, который имеет 1: 5

{0} {1} {2} {3} {4}

{0} 6   7   8   9   10

{1} 11  12  13  14  15

{2} 16  17  18  19  20

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Ваш код не выполняет то, о чем вы думаете:

x = divide_chunks(my_list, 4)

print(x)

Вернет объект, подобный следующему:

    <generator object divide_chunks at 0x2aaae0622e60>

Теперь вы можете напрямую использовать:

pd.DataFrame(x)

    0   1   2   3
0   1   2   3   4
1   5   6   7   8
2   9   10  11  12
3   13  14  15  16
4   17  18  19  20
0 голосов
/ 05 ноября 2019

Это можно сделать с помощью np.array_split. Здесь я добавил дополнительное значение, чтобы показать, как оно ведет себя с неравномерным делением

import pandas as pd
import numpy as np

my_list = [*range(1, 22)]

N = 5
pd.DataFrame(np.array_split(my_list, range(N, len(my_list), N)))
#    0     1     2     3     4
#0   1   2.0   3.0   4.0   5.0
#1   6   7.0   8.0   9.0  10.0
#2  11  12.0  13.0  14.0  15.0
#3  16  17.0  18.0  19.0  20.0
#4  21   NaN   NaN   NaN   NaN
...