【问题标题】:Efficiently Concatenate Pandas DataFrames in series高效串联 Pandas DataFrames
【发布时间】:2018-01-14 04:52:10
【问题描述】:

我有 10 个行数相同的 DataFrame,每个 DataFrame 都有自己的一组唯一列(不在任何数据帧之间共享)。我想简单地将数据帧串联在一起,以便最终数据帧包含所有数据帧中包含的所有列。最终数据帧的第一行将包含第一个数据帧的第一行,然后是第二个数据帧的第一行,依此类推,直到第十个数据帧。我已经尝试过 pandas.concat(dataframes, axis=1),但它最终以某种方式在我的数值数据中创建了 NaN 值。我通过编写一个极其缓慢且丑陋的方法来解决它,该方法按索引递增行并逐行创建最终数据帧。这样做的正确熊猫方法是什么?

【问题讨论】:

  • 这是因为 DataFrame 的行数不同。你能告诉我DataFrames的形状吗?
  • 您需要将所有数据帧重新索引为相同,然后调用pd.mergepd.concat
  • @Wonjin 不,正如我所说,它们的行数都相同。

标签: python numpy


【解决方案1】:

您可以通过列表理解来做到这一点:

pd.concat([df.reset_index(drop=True) for df in df_list], axis = 1)

【讨论】:

    【解决方案2】:

    假设您的所有数据框都在列表中 df_list:

    df0_index = df_list[0].index # get the first data frame's index
    
    for i in range(1, len(df_list)):
        df_list[i] = df_list[i].set_index(df0_index) # reindex all the other dataframes
    
    df_out = pd.concat(df_list, axis=1) # concatenate 
    

    【讨论】:

    • 我希望我在 8 小时前就知道这一点!我需要花时间来更好地理解 Index 的。谢谢。
    • 嘿,对不起,我真的试过了,但它不起作用。我仍然莫名其妙地获得了 NaN 值。在这一点上,这让我难以置信,我认为问题在于 Pandas 而不是我的代码。
    • @YungGun 很遗憾你没有被接受......如果问题出在熊猫身上。无论如何,我会尝试创建一个示例。
    • @YungGun 我试过了。我明白为什么会出现这个问题,但是set_index 有效,所以你可以试试。
    【解决方案3】:

    搞定了。只需在调用 pandas.concat() 时将“ignore_index”设置为 true。

    pd.concat(df_list, axis=1, ignore_index=True) # returns dataframes correctly.
    

    请注意,由于某种原因,重新索引不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 2015-03-11
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 2013-10-09
      相关资源
      最近更新 更多