【问题标题】:Chunking a list to size N and adding to a Data Frame ends up with missing data将列表分块为 N 大小并添加到数据框中最终会丢失数据
【发布时间】:2019-11-05 17:31:34
【问题描述】:

我将一个列表分块为大小为 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

【问题讨论】:

    标签: python pandas split iteration chunks


    【解决方案1】:

    您的代码没有按照您的想法执行:

    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
    

    【讨论】:

    • 谢谢!不知道为什么我一开始没有那样尝试
    【解决方案2】:

    这可以通过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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多