首页 > 解决方案 > for循环中的Pandas DataFrame连接返回空DataFrame

问题描述

我正在尝试将 DataFrame 的几个循环数据元素堆叠在一起以更改 DataFrame 尺寸。例如,从 100x20 到 500x4。

Sample 11x7 input:
    0   1   2   3   4   5   6   7       
0   1   713 1622    658 1658    620 1734        
1   2   714 1623    657 1700    618 1735    
2   3   714 1624    656 1701    617 1736    
3   4   714 1625    655 1702    615 1738    
4   5   714 1626    654 1703    614 1739    
5   6   713 1627    653 1705    612 1740    
6   7   713 1628    651 1706    610 1741    
7   8   713 1629    650 1707    609 1742    
8   9   713 1630    649 1709    607 1744    
9   10  713 1631    648 1710    605 1745    
10  11  712 1632    646 1711    604 1746    

Desired 32x3 output:
0   1   713 1622    
1   2   714 1623    
2   3   714 1624    
3   4   714 1625    
4   5   714 1626    
5   6   713 1627    
6   7   713 1628    
7   8   713 1629    
8   9   713 1630    
9   10  713 1631    
10  11  712 1632    
11  1   658 1658    
12  2   657 1700    
13  3   656 1701    
14  4   655 1702    
15  5   654 1703    
16  6   653 1705    
17  7   651 1706    
18  8   650 1707    
19  9   649 1709    
20  10  648 1710    
21  11  646 1711    
22  1   620 1734        
23  2   618 1735    
24  3   617 1736    
25  4   615 1738    
26  5   614 1739    
27  6   612 1740    
28  7   610 1741    
29  8   609 1742    
30  9   607 1744    
31  10  605 1745    
32  11  604 1746

我花了很多时间检查这个,我找不到比这更好的东西了

pd.concat([df1, df2], ignore_index=True) 
or 
df1.append(df2, ignore_index=True)

,在这种情况下应该产生相同的解决方案。但是,无论使用哪个选项,它都将被放置在循环的末尾,该循环会生成临时 DataFrame,这些临时 DataFrame 将与永久 DataFrame 连接或附加到永久 DataFrame 上。临时 df 的结果很好,但据称简单的连接步骤始终失败。我得到一个带有正确标题的空 DataFrame ...


for l in range(1,13):
    s1 = l * 4 - 4
    s2 = l * 4 
    dft = df0.iloc[:, s1:s2]
    dft.columns = new_col
    #pd.concat([df1, dft], ignore_index=True, axis = 0)
    #df1.append(dft, ignore_index=True)
df1.head()

任何一条被注释掉的行都应该产生一堆 4 宽的临时数据帧...我得到一个带有正确标题且没有错误消息的空数据帧...

标签: pythonpandasstackappendconcat

解决方案


@Aryerez 在上面的评论中解决了:默认情况下 pd.concat() 和 df.append() 都不到位。看看 df1 = pd.concat(etc...) 是否解决它。


推荐阅读