Pandas for 循环中的 DataFrame 连接 returns 空 DataFrame
Pandas DataFrame concatenation in for loop returns empty 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。临时 df 的结果很好,但据称直接的连接步骤始终失败。我得到一个带有适当 header...
的空 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 宽的临时 DataFrame...我得到一个空的 DataFrame,带有正确的 header 并且没有错误消息...
由@Aryerez 在上面的评论中解决:
pd.concat() 和 df.append() 默认情况下都没有。看看 df1 = pd.concat(etc...) 是否解决了它。
我正在尝试将 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。临时 df 的结果很好,但据称直接的连接步骤始终失败。我得到一个带有适当 header...
的空 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 宽的临时 DataFrame...我得到一个空的 DataFrame,带有正确的 header 并且没有错误消息...
由@Aryerez 在上面的评论中解决: pd.concat() 和 df.append() 默认情况下都没有。看看 df1 = pd.concat(etc...) 是否解决了它。