【问题标题】:error concatenating multiindex pandas dataframes (categorical)连接多索引熊猫数据帧时出错(分类)
【发布时间】:2017-03-05 13:11:21
【问题描述】:

L 是行上具有多索引的数据帧列表。

pd.concat(L,axis=1)

我收到以下错误(来自categorical.py 中的Categorical 构造函数):

TypeError: 'values' 未排序,请通过传入 categories 参数明确指定类别顺序。

这显然与我的数据框中的值有关,因为如果我以某种方式限制数据,我可以让它工作。

例如所有这些工作

a=pd.concat(L[0:6],axis=1)
b=pd.concat(L[6:11],axis=1)
c=pd.concat(L[3:9],axis=1)

但是

d=pd.concat(L[0:11],axis=1)

失败。

pd.concat([x.iloc[0:1000,:] for x in L[0:11]],axis=1)

也可以。我已经经历了它打破的边缘情况,对于我的生活,我没有看到任何可能在这些行中令人反感的东西。有人对我应该寻找什么有一些想法吗?

【问题讨论】:

  • Privet @Victor,你能找出这个错误吗?我在某些代码上遇到了同样的错误,正在尝试找出解决方法。
  • @mkheifetz 不,从来没有弄清楚,我想出了一些我不记得了的解决方法

标签: python pandas


【解决方案1】:

我遇到了同样的错误:

TypeError: 'values' 未排序,请通过传入 categories 参数明确指定类别顺序。

但是,它周围没有太多材料。看看上面的错误日志说明了什么。我有:

TypeError:不可排序的类型:range()

在处理上述异常的过程中,又发生了一个异常:

线索是 'range() here Pandas 将 '(1,2)' 或 '(30,31)' 解释为字符串而不是 'range( 1,3)' 或 'range(30,32)'。非常烦人,因为 dtypes 仍然是对象。

我不得不将列内容更改为列表和/或删除“range(x,y)”列。

希望这对遇到此问题的其他人有所帮助。干杯!

【讨论】:

    【解决方案2】:

    当我使用自定义应用功能执行df.groupby(...).apply(...) 时,我也遇到了这个问题。当结果在 groupby-apply 之后重新合并在一起时,错误似乎出现了(所以我一定在我的自定义 apply 函数中返回了一些它不喜欢的东西)。

    在检查了 pytest 提供的大量堆栈跟踪后,我发现我的索引值中出现了一个神秘的第三个值:

    values = Index([(2018-09-01 00:00:00, 'SE0011527613'),
                    (2018-09-25 00:00:00, 'SE0011527613'),
                    1535760000000000000], dtype='object')
    

    我完全不知道它是如何出现的,但我设法通过在代码的特定部分避免多索引内容(广泛使用reset_indexset_index)以某种方式解决了它。

    不确定这是否对任何人都有帮助,但你有它。如果有人可以尝试一个最小的可重现示例,这会有所帮助(我没有设法)。

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 1970-01-01
      • 2020-01-20
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      相关资源
      最近更新 更多