创建切片数据帧列表

时间:2017-09-13 04:46:57

标签: python python-3.x pandas

我正在尝试创建一个数据帧列表,其中每个数据帧是一个更大的数据帧的3行。

    dframes = [df[0:3], df[3:6],...,df[2000:2003]]

我仍然是编程新手,为什么:

    x = 3
    dframes = []
    for i in range(0, len(df)):
        dframes = dframes.append(df[i:x])
        i = x
        x = x + 3
dframes = dframes.append(df[i:x])
AttributeError: 'NoneType' object has no attribute 'append'

3 个答案:

答案 0 :(得分:4)

使用np.split

<强>设置
考虑数据框df

df = pd.DataFrame(dict(A=range(15), B=list('abcdefghijklmno')))

解决方案

dframes = np.split(df, range(3, len(df), 3))

输出

for d in dframes:
    print(d, '\n')

   A  B
0  0  a
1  1  b
2  2  c 

   A  B
3  3  d
4  4  e
5  5  f 

   A  B
6  6  g
7  7  h
8  8  i 

     A  B
9    9  j
10  10  k
11  11  l 

     A  B
12  12  m
13  13  n
14  14  o 

答案 1 :(得分:2)

Python引发此错误,因为函数append返回None,下次您的战利品变量dframesNone

您可以使用:

[list(dframes[i:i+3]) for i in range(0, len(dframes), 3)]

答案 2 :(得分:2)

您可以使用groupby numpy array创建的length of index除以3除以np.random.seed(100) df = pd.DataFrame(np.random.randint(10, size=(10,5)), columns=list('ABCDE')) print (df) A B C D E 0 8 8 3 7 7 1 0 4 2 5 2 2 2 2 1 0 8 3 4 0 9 6 2 4 4 1 5 3 4 5 4 3 7 1 1 6 7 7 0 2 9 7 9 3 2 5 8 8 1 0 7 6 2 9 0 8 2 5 1 dfs = [x for i, x in df.groupby(np.arange(len(df.index)) // 3)] print (dfs) [ A B C D E 0 8 8 3 7 7 1 0 4 2 5 2 2 2 2 1 0 8, A B C D E 3 4 0 9 6 2 4 4 1 5 3 4 5 4 3 7 1 1, A B C D E 6 7 7 0 2 9 7 9 3 2 5 8 8 1 0 7 6 2, A B C D E 9 0 8 2 5 1] 之外的列表理解:

dfs = [x for i, x in df.groupby(df.index // 3)]

如果默认单调索引(0,1,2 ...)解决方案可以简化:

{{1}}