我有三个数据帧:
df2 = pd.DataFrame(np.random.randint(0, 50, (3,3)), columns = ["A", "B", "C"], index = ["1", "2", "3"])
df3 = pd.DataFrame(np.random.randint(0, 50, (4,2)), columns = ["D", "E"], index = ["100", "101", "102", "103"])
df4 = pd.DataFrame(np.random.randint(0, 1000, (11,5)), columns = ["F", "G", "H", "I", "J"], index = ["1", "2", "3", "4", "5", "6", "7", "100", "101", "102", "103"])
我希望在
中连接这些数据帧df5 = pd.DataFrame(columns = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"])
现在使用
df5 = pd.concat([df5, df2])
df5 = pd.concat([df5, df3])
df5 = pd.concat([df5, df4])
它会创建多个1,2,3,4,100,101,102和103个索引。我不希望它那样做。理想情况下,我希望FGHIJ的值可以粘贴在第一个索引1中,同样也适用于索引2,3,4,100,101,102,103。有人可以帮忙吗?
答案 0 :(得分:1)
我认为你需要加入数据帧而不是连接它们。
df5 = df4.join([df2, df3])
join函数的默认设置是使用 index 作为列来执行连接操作。
答案 1 :(得分:0)
您使用的是什么版本的Python和Pandas?我正在使用Python 3.6和Pandas 22,我无法复制您的问题。这就是我做的。
从你的帖子
df2 = pd.DataFrame(np.random.randint(0, 50, (3,3)), columns = ["A", "B", "C"], index = ["1", "2", "3"])
df3 = pd.DataFrame(np.random.randint(0, 50, (4,2)), columns = ["D", "E"], index = ["100", "101", "102", "103"])
df4 = pd.DataFrame(np.random.randint(0, 1000, (11,5)), columns = ["F", "G", "H", "I", "J"], index = ["1", "2", "3", "4", "5", "6", "7", "100", "101", "102", "103"])
现在的解决方案(与Goyo的评论相同......似乎有效!):
df5 = pd.concat([df2, df3, df4], axis=1)
这给出了:
A B C D E F G H I J
1 38.0 2.0 25.0 NaN NaN 886 767 281 771 980
100 NaN NaN NaN 42.0 30.0 305 986 192 554 697
101 NaN NaN NaN 2.0 45.0 581 910 767 513 758
102 NaN NaN NaN 31.0 21.0 767 102 825 90 904
103 NaN NaN NaN 32.0 35.0 342 3 293 549 506
2 22.0 8.0 26.0 NaN NaN 140 697 705 289 330
3 28.0 46.0 32.0 NaN NaN 672 928 503 406 903
4 NaN NaN NaN NaN NaN 298 306 122 115 323
5 NaN NaN NaN NaN NaN 937 702 732 677 60
6 NaN NaN NaN NaN NaN 276 869 812 552 299
7 NaN NaN NaN NaN NaN 445 288 107 66 165
从我原来的帖子中可以看出这是你想要的。这是你想要的吗?我在这里看到这个数据帧的唯一问题是索引没有排序。这可以通过调用df5.sort_index来解决。
如果这不是您想要的,请更具体。
答案 2 :(得分:0)
正如我之前所说,原始问题中提到的数据框是问题的一部分。实际上我有14个不同的数据帧,我使用Tabula包从2个寻呼机PDF中提取。实际的PDF在每个页面上有7个数据帧,具有相同的列标题。现在让我们不要讨论如何使用Tabula进行提取并关注数据帧。有人刚问过python版本,我使用的是Python 2.7。
Dataframes:
df2 = pd.DataFrame(np.random.randint(0, 250, (4,3)), columns = ["A", "B", "C"], index = [1, 2, 3, 4])
df3 = pd.DataFrame(np.random.randint(0, 250, (4,2)), columns = ["D", "E"], index = [100, 101, 102, 103])
df4 = pd.DataFrame(np.random.randint(0, 5000, (11,5)), columns = ["F", "G", "H", "I", "J"], index = [1, 2, 3, 4, 5, 6, 7, 100, 101, 102, 103])
df5 = pd.DataFrame(np.random.randint(0, 300, (4,2)), columns = ["N", "O"], index = [1, 2, 3, 4])
df6 = pd.DataFrame(np.random.randint(0, 250, (4,3)), columns = ["P", "Q", "R"], index = [1, 2, 3, 4])
df7 = pd.DataFrame(np.random.randint(0, 5000, (7,3)), columns = ["K", "L", "M"], index = [1, 2, 3, 100, 101, 102, 103])
df8 = pd.DataFrame(np.random.randint(0, 300, (4,1)), columns = ["S"], index = [100, 101, 102, 103])
df9 = pd.DataFrame(np.random.randint(0, 400, (4,3)), columns = ["A", "B", "C"], index = [1, 2, 3, 4])
df10 = pd.DataFrame(np.random.randint(0, 250, (4,2)), columns = ["D", "E"], index = [100, 101, 102, 103])
df11 = pd.DataFrame(np.random.randint(0, 5000, (11,5)), columns = ["F", "G", "H", "I", "J"], index = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
df12 = pd.DataFrame(np.random.randint(0, 500, (4,2)), columns = ["N", "O"], index = [1, 2, 3, 4])
df13 = pd.DataFrame(np.random.randint(0, 600, (4,3)), columns = ["P", "Q", "R"], index = [1, 2, 3, 4])
df14 = pd.DataFrame(np.random.randint(0, 700, (4,1)), columns = ["S"], index = [1, 2, 3, 4])
df15 = pd.DataFrame(np.random.randint(0, 5000, (7,3)), columns = ["K", "L", "M"], index = [1, 2, 3, 4, 5, 6 ,7])
我想在行而不是列上连接这些数据帧。首先,我创建了一个用于标识唯一索引列表的连续数据框:
df16 = pd.concat([df2, df3, df4, df5, df6, df7, df8, df9, df10, df11, df12, df13, df15, df14], axis = "columns")
然后,
df18 = pd.DataFrame(index = list(df16.index.unique()))
df19 = pd.DataFrame(index = list(df16.index.unique()))
创建两个空列数据帧的想法是避免重复列上的错误。然后作为@amr keleg(谢谢!)建议我继续将数据帧(df2 .... df8)从第一页加入df18,将第二页加入(df9 ... df15)。现在它变得更简单了:
df18 = df18.join([df2, df3, df4, df5, df6, df7, df8])
df19 = df19.join([df9, df10, df11, df12, df13, df14, df15])
现在使用pd.concat连接上述两个数据帧以获得所需的解决方案:
df20 = pd.concat([df18, df19])
df20.sort_index(axis = 0, inplace = True, ascending = True)
我不是Python的专家。我只是个学习者!对于那些有更好解决方案的人可以提供帮助。