Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将新dataframe添加到现有数据库,但仅在列名匹配时添加_Python_Pandas_Dataframe - Fatal编程技术网

Python 将新dataframe添加到现有数据库,但仅在列名匹配时添加

Python 将新dataframe添加到现有数据库,但仅在列名匹配时添加,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,我正试图结合,但我没有得到我想要的结果使用pandas.concat 我有一个数据库的数据,我想添加新的数据,但只有当列的名称匹配 假设df1是: A B C D 1 1 2 2 3 3 4 4 5 5 6 6 df2是: A E D F 7 7 8 8 9 9 0 0 我希望得到的结果是: A B C D 1 1 2 2 3 3 4 4 5 5 6 6 7 - - 8 9 - - 0 空白数据不必是-,它可以是任何内容 当我使用: results=pandas.conca

我有两个数据帧,我正试图结合,但我没有得到我想要的结果使用pandas.concat

我有一个数据库的数据,我想添加新的数据,但只有当列的名称匹配

假设df1是:

A B C D
1 1 2 2
3 3 4 4
5 5 6 6
df2是:

A E D F
7 7 8 8
9 9 0 0
我希望得到的结果是:

A B C D
1 1 2 2
3 3 4 4
5 5 6 6
7 - - 8
9 - - 0
空白数据不必是
-
,它可以是任何内容

当我使用:

results=pandas.concat([df1,df2],axis=0,join='outer')

它为我提供了一个新的数据帧,其中包含所有列a到F,而不是我想要的。我有什么办法可以做到这一点吗?谢谢

您希望使用该方法并指定要与
left
参数的索引对齐,并且只关心列

d1, d2 = df1.align(df2, join='left', axis=1)
然后可以使用
pd.DataFrame.append
pd.concat

pd.concat([d1, d2], ignore_index=True)

   A    B    C  D
0  1  1.0  2.0  2
1  3  3.0  4.0  4
2  5  5.0  6.0  6
3  7  NaN  NaN  8
4  9  NaN  NaN  0


我更喜欢的方式是跳过对姓名的重新分配

pd.concat(df1.align(df2, 'left', 1), ignore_index=True)

   A    B    C  D
0  1  1.0  2.0  2
1  3  3.0  4.0  4
2  5  5.0  6.0  6
3  7  NaN  NaN  8
4  9  NaN  NaN  0

您可以使用查找
df2
concat
append
上列的交点:

pd.concat(
    [df1, df2[df1.columns.intersection(df2.columns)]]
)
或者


您还可以使用reindex和concat:

pd.concat([df1,df2.reindex(columns=df1.columns)])
Out[81]: 
   A    B    C  D
0  1  1.0  2.0  2
1  3  3.0  4.0  4
2  5  5.0  6.0  6
0  7  NaN  NaN  8
1  9  NaN  NaN  0

合并前先转置

df1.T.merge(df2.T, how="left", left_index=True, right_index=True).T

    A   B   C   D
0_x 1.0 1.0 2.0 2.0
1_x 3.0 3.0 4.0 4.0
2   5.0 5.0 6.0 6.0
0_y 7.0 NaN NaN 8.0
1_y 9.0 NaN NaN 0.0

df1.T           df2.T

    0   1   2      1 2
A   1   3   5   A  7 9
B   1   3   5   E  7 9
C   2   4   6   D  8 0
D   2   4   6   F  8 0
现在可以通过使用
how=“left”
进行合并来获得结果,我们通过传递
left\u index=True
right\u index=True
来使用索引作为连接键

df1.T.merge(df2.T, how="left", left_index=True, right_index=True)

    0_x 1_x 2   0_y 1_y
A   1   3   5   7.0 9.0
B   1   3   5   NaN NaN
C   2   4   6   NaN NaN
D   2   4   6   8.0 0.0

哇,太棒了!超级简单,完全符合我的要求,谢谢!
pd.concat([df1,df2.reindex(columns=df1.columns)])
Out[81]: 
   A    B    C  D
0  1  1.0  2.0  2
1  3  3.0  4.0  4
2  5  5.0  6.0  6
0  7  NaN  NaN  8
1  9  NaN  NaN  0
df1.T.merge(df2.T, how="left", left_index=True, right_index=True).T

    A   B   C   D
0_x 1.0 1.0 2.0 2.0
1_x 3.0 3.0 4.0 4.0
2   5.0 5.0 6.0 6.0
0_y 7.0 NaN NaN 8.0
1_y 9.0 NaN NaN 0.0

df1.T           df2.T

    0   1   2      1 2
A   1   3   5   A  7 9
B   1   3   5   E  7 9
C   2   4   6   D  8 0
D   2   4   6   F  8 0
df1.T.merge(df2.T, how="left", left_index=True, right_index=True)

    0_x 1_x 2   0_y 1_y
A   1   3   5   7.0 9.0
B   1   3   5   NaN NaN
C   2   4   6   NaN NaN
D   2   4   6   8.0 0.0