【问题标题】:Will passing ignore_index=True to pd.concat preserve index succession within dataframes that I'm concatenating?将 ignore_index=True 传递给 pd.concat 会保留我要连接的数据帧中的索引连续性吗?
【发布时间】:2019-06-11 14:45:16
【问题描述】:

我有两个数据框:

df1 = 
    value
0     a
1     b
2     c

df2 =
    value
0     d
1     e

我需要跨索引连接它们,但我必须保留第一个数据帧的索引并在第二个数据帧中继续,如下所示:

result =
    value
0     a
1     b
2     c
3     d
4     e

我的猜测是pd.concat([df1, df2], ignore_index=True) 会完成这项工作。但是,我担心对于大型数据帧,行的顺序可能会改变,我最终会得到这样的结果(前两行改变了索引):

result =
    value
0     b
1     a
2     c
3     d
4     e

所以我的问题是,pd.concatignore_index=True 是否将索引连续保存在正在连接的数据帧中,或者索引分配存在随机性?

【问题讨论】:

  • 我认为您不必担心顺序,concat 基本上是按给定顺序堆叠您指定的数据帧,ignore_index 将在级联。我一直在使用它,从来没有遇到过订单问题。
  • 我只是想确定一下。因为在将数据从 DataFrame 传递到 ndarray 时,我遇到了类似的问题,通常会保留顺序,但在我的特殊情况下不是。
  • 我只是想确定一下 -> 写一个测试
  • @PaulH 我担心的是通常的行为是保留索引只是因为内存中的计算是这样完成的,但在某些特殊情况下可能不是真的(对于例如,python将硬盘上的数据溢出以释放内存,然后再次读取)

标签: python pandas concat


【解决方案1】:

根据我的经验,pd.concat 在连接期间按照 DataFrame 传递给它的顺序连接行。


如果您想安全,请指定sort=False,这也将避免对列进行排序:

pd.concat([df1, df2], axis=0, sort=False, ignore_index=True)

  value
0     a
1     b
2     c
3     d
4     e

【讨论】:

  • 那么“未排序”是指保留原来的顺序吗?因为它也可能意味着随机顺序(由于执行计算的方式,这通常是原始顺序)。
  • @AlexandrKapshuk 不,这意味着原始订单被保留。 pd.concat 将在垂直连接时对未排序的列进行排序。但行将保持其顺序。
  • 示例中的非连接轴不是列本身,因为我们是沿着索引连接的吗?
  • 排序的是列:notebook.
  • @araraonline 有意思,谢谢分享!为了清楚起见,将编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 2017-09-04
  • 2019-10-24
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
相关资源
最近更新 更多