如何在pandas中连接两个具有不同列数的帧?

lmi*_*asf 7 python pandas

我有以下数据帧:

数据帧1:

|---------------------|------------------|
|      property_id    |        beds      |
|---------------------|------------------|
|          1          |         1        |
|---------------------|------------------|
|          2          |         2        | 
|---------------------|------------------|
Run Code Online (Sandbox Code Playgroud)

数据帧2:

|---------------------| 
|      property_id    |
|---------------------|
|          3          |
|---------------------|
|          4          |
|---------------------|
Run Code Online (Sandbox Code Playgroud)

我想要生成的是以下Dataframe:

|---------------------|------------------|
|      property_id    |        beds      |
|---------------------|------------------|
|          1          |         1        |
|---------------------|------------------|
|          2          |         2        | 
|---------------------|------------------|
|          3          |         0        |
|---------------------|------------------|
|          4          |         0        | 
|---------------------|------------------|
Run Code Online (Sandbox Code Playgroud)

我想要的是连接两个Dataframe,前者有比后者更多的列,但后者的所有列都在前者.当后一个数据帧中不存在该列时,我想将默认值设置为0.如何实现此目的?

df1 = pd.DataFrame({'property_id': [1, 2], 'beds': [1, 2]})
df2 = pd.DataFrame({'property_id': [3, 4]})
Run Code Online (Sandbox Code Playgroud)

我几乎没有大熊猫的经验,所以我该怎么办?

Psi*_*dom 11

你可以使用pandas.concat或者append方法,这两种方法都会NA为子数据框中不存在的列生成,用零填充它们,你可以使用fillna(0):

df1.append(df2).fillna(0)

#  beds     property_id
#0  1.0          1
#1  2.0          2
#0  0.0          3
#1  0.0          4


pd.concat([df1, df2]).fillna(0)

#  beds     property_id
#0  1.0         1
#1  2.0         2
#0  0.0         3
#1  0.0         4
Run Code Online (Sandbox Code Playgroud)


piR*_*red 5

df1.append(df2.reindex_axis(df1.columns, 1, fill_value=0))
Run Code Online (Sandbox Code Playgroud)

优点是应该保留整数类型

  • @lmiguelvargasf 我的意思是,当您在整数列中连接、追加、重新索引或以其他方式引入潜在的 nan 时,您会自动将该列转换为浮点数。通过使用其他数据帧列重新索引并使用 fill_value 选项,我们告诉 pandas 不要转换,而是保留为整数,并用零填充缺失的部分。此外,这对于 concat 也同样有效。 (2认同)