【问题标题】:How to concatenate two frames with different number of columns in pandas?如何在熊猫中连接具有不同列数的两个帧?
【发布时间】:2017-09-20 13:56:33
【问题描述】:

我有以下数据框:

数据框 1:

|---------------------|------------------|
|      property_id    |        beds      |
|---------------------|------------------|
|          1          |         1        |
|---------------------|------------------|
|          2          |         2        | 
|---------------------|------------------|

数据框 2:

|---------------------| 
|      property_id    |
|---------------------|
|          3          |
|---------------------|
|          4          |
|---------------------|

我想要生成的是以下数据框:

|---------------------|------------------|
|      property_id    |        beds      |
|---------------------|------------------|
|          1          |         1        |
|---------------------|------------------|
|          2          |         2        | 
|---------------------|------------------|
|          3          |         0        |
|---------------------|------------------|
|          4          |         0        | 
|---------------------|------------------|

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

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

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以为此使用pandas.concatappend 方法,这两种方法都会为子数据框中不存在的列生成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
    

    【讨论】:

    • 谢谢,有用吗?当时间紧迫时,哪一个效率更高?
    • 一些天真的时间表明它们的速度差不多,但是如果您有两个以上的数据帧列表,pd.concat 具有优势,因为它可以在一个命令中完成,如 pd.concat(list_of_dataframes)append 不能。但严格来说,我对这两种方法的时间比较没有太多的了解。我经常使用pd.concat
    • 为什么连接后列的顺序会改变?我们如何获得 df1 中列的原始顺序?
    【解决方案2】:
    df1.append(df2.reindex_axis(df1.columns, 1, fill_value=0))
    

    优点是应该保留整数类型

    【讨论】:

    • “应该保留整数类型”是什么意思?
    • @lmiuelvargasf 我的意思是,当您在整数列中连接、追加、重新索引或以其他方式引入潜在的 nan 时,您会自动将该列转换为浮点数。通过使用其他数据框列重新索引并使用 fill_value 选项,我们告诉 pandas 不要转换而是保留为整数,并用零填充缺失的部分。此外,这对于 concat 也同样适用。
    • 遗憾的是,append 没有按建议工作:结果表的列数是两个表中较窄(而不是较宽)的列数。而reindex_axis 不仅已被弃用,它不再存在……这需要重构 IMO。
    猜你喜欢
    • 2016-08-23
    • 2021-07-29
    • 2021-12-05
    • 2020-03-26
    • 2020-02-21
    • 2022-10-06
    • 1970-01-01
    • 2020-11-27
    • 2020-08-06
    相关资源
    最近更新 更多