Python 在不创建新列的情况下追加dataframe
我有两个数据帧,如下所示:Python 在不创建新列的情况下追加dataframe,python,pandas,dataframe,append,concat,Python,Pandas,Dataframe,Append,Concat,我有两个数据帧,如下所示: df1= A B 1 A1 B1 2 A2 B2 3 A3 B3 df2 = A C 4 A4 C4 5 A5 C5 我想将df2附加到df1,如下所示: A B 1 A1 B1 2 A2 B2 3 A3 B3 4 A4 NaN 5 A5 NaN (注意:我编辑了数据帧,因此并非df1中的所有列都必须在df2中) 无论我使用的是concat还是append,我得到的结果数据帧都会
df1=
A B
1 A1 B1
2 A2 B2
3 A3 B3
df2 =
A C
4 A4 C4
5 A5 C5
我想将df2
附加到df1
,如下所示:
A B
1 A1 B1
2 A2 B2
3 A3 B3
4 A4 NaN
5 A5 NaN
(注意:我编辑了数据帧,因此并非df1
中的所有列都必须在df2
中)
无论我使用的是
concat
还是append
,我得到的结果数据帧都会有一个名为“C”的列,前三行填充了nan
。我只想保留df1
中的两个原始列,并附加新值。是否有一种方法可以连接数据帧,而不必在之后删除额外的列?您可以先筛选列,以便通过子集进行追加:
print (df2[['A']])
A
4 A4
5 A5
print (pd.concat([df1, df2[['A']]]))
A B
1 A1 B1
2 A2 B2
3 A3 B3
4 A4 NaN
5 A5 NaN
print (df1.append(df2[['A']]))
A B
1 A1 B1
2 A2 B2
3 A3 B3
4 A4 NaN
5 A5 NaN
或:
按注释编辑:
如果df1
和df2
中的列具有不同的列,请使用:
事实上,解决方案就在这个世界的一个模糊角落里。下面是要使用的代码:
pd.concat([df1,df2],join_axes=[df1.columns])
鉴于上述示例,您是否可以编辑以显示您希望最终数据帧的外观?我很难想象,对不起。我已经编辑了这个问题。谢谢。这是我最初提问的方式。如果不是df1的所有列都在df2中,我该怎么办?然后在不匹配的列中得到NaN
,如(df1.append(df2))
。您需要以其他方式追加吗?您得到的结果看起来非常好,但是您必须对df1中而不是df2中的每一列执行此操作。如果df1
的所有列都位于df2
,请使用print(pd.concat([df1,df2[df1.columns]])
如果没有,您可以通过print(df1.columns.cross)找到公共列(df2.列))
print (df1.append(df2[['A','B']]))
A B
1 A1 B1
2 A2 B2
3 A3 B3
4 A4 B4
5 A5 B5
print (df1)
A B D
1 A1 B1 R
2 A2 B2 T
3 A3 B3 E
print (df2)
A B C
4 A4 B4 C4
5 A5 B5 C5
print (df1.columns.intersection(df2.columns))
Index(['A', 'B'], dtype='object')
print (pd.concat([df1, df2[df1.columns.intersection(df2.columns)]]))
A B D
1 A1 B1 R
2 A2 B2 T
3 A3 B3 E
4 A4 B4 NaN
5 A5 B5 NaN
pd.concat([df1,df2],join_axes=[df1.columns])