使用 pandas 追加、连接、连接或合并两个数据框

Posted

技术标签:

【中文标题】使用 pandas 追加、连接、连接或合并两个数据框【英文标题】:Append, Concat, Join or Merge Two dataframes with pandas 【发布时间】:2018-09-27 19:40:09 【问题描述】:

如何组合这两个数据帧以从我用 pandas 创建的两个数据帧中获得所需的输出?

df1 =

   OBJECTID  Test #
0         1       1
1         2       2
2         3       3
3         4       4
4         5       5
5         6       6
6         7       7
7         8       8
8         9       9

df2 =(索引为 2,因为它是一个切片)

   ObjectID  Test Number
2  ObjectID  Test Number

左边的“列”是索引,标题在顶部。我希望输出是

   OBJECTID    Test #
0  ObjectID  Test Number
1         1       1
2         2       2
3         3       3
4         4       4
5         5       5
6         6       6
7         7       7
8         8       8
9         9       9

这个:

df2 = df2.reset_index(drop=True)
frame_append = df2[["OBJECTID","Test #"]].combine_first(df1)

给予:

   OBJECTID       Test #
0  ObjectID  Test Number
1         2            2
2         3            3
3         4            4
4         5            5
5         6            6
6         7            7
7         8            8
8         9            9

【问题讨论】:

看起来像XY problem。你真的只是想重命名一些列吗?或者插入一些值? 我正在寻找插入值。我有两个数据框,它们是从两个单独的 .csv 文件创建的。 【参考方案1】:

你可以这样做。先重置设置索引。

df2[[1,2]].combine_first(df1)

输出:

    0         1            2
0  0.0  ObjectID  Test Number
1  1.0         2            2
2  2.0         3            3
3  3.0         4            4
4  4.0         5            5
5  5.0         6            6
6  6.0         7            7
7  7.0         8            8
8  8.0         9            9

【讨论】:

我得到“KeyError: '[1 2] not in index'” df2 的索引实际上是 2 你是什么列标题?它们是字符串 try [['1','2']] 吗? 您需要在df2 = df2.reset_index() 上重置索引以将该行放在 df 的顶部。否则,它将将该行放在 df 中的索引 2 处。 我应该指定两个数据框中的第一列是索引,而不是数据框中的实际列。道歉。这会改变 [1,2] 吗? 我厌倦了 [0,1] 并收到错误消息 KeyError: '[0 1] not in index'

以上是关于使用 pandas 追加、连接、连接或合并两个数据框的主要内容,如果未能解决你的问题,请参考以下文章

使用pandas进行数据预处理01

Python使用pandas读取两个或者多个excel文件(xlsx)并进行数据连接(join)合并两个或者多个excel的信息

Pandas:如何将两个不完整的数据帧合并或合并为一个完整的数据帧

Python通过内连接合并Pandas数据集有两个字段

pandas表连接

使用不同的时间间隔合并并填充Pandas中的两个数据帧