我正在尝试创建一个数据帧列表,其中每个数据帧是一个更大的数据帧的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'
答案 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
,下次您的战利品变量dframes
将None
您可以使用:
[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}}