【问题标题】:Storing Lists in Pandas DataFrame: Multi-Index Error [duplicate]在 Pandas DataFrame 中存储列表:多索引错误 [重复]
【发布时间】:2021-06-25 09:00:17
【问题描述】:

在我看来,这个问题之前可能已经被问过,如果不是在 SO 上,那么在其他地方。我一直没能找到它。如有重复请见谅...

原来确实有一个很相关的问题:Python pandas insert list into a cell。但是,它不是重复的:确实,那里的错误与这里的错误不同。但是,那里的解决方案可以在这里应用。

下面也有帮助:https://stackoverflow.com/a/66852480/5065462


我正在尝试将列表存储在 pandas DataFrame 中。简而言之,每一行对应于一组人的一些信息,我有一个 people_ids 列,这是他们的 ID 列表。

但是,我遇到了以下错误。

ValueError: 无法使用长度与值不同的多索引选择索引器进行设置

这是一个最小的非工作示例。

df = pd.DataFrame({"a": [[1], [1,2]], "b": range(1,3)})
print(df)

df.loc[0, "a"] = [10,2]
print(df)

运行df.loc 命令会出现上述错误。如果我用元组替换列表和/或在不同行中使用长度相同的列表/元组,我会得到同样的错误。

如果我删除列 b,那么它适用于列表和元组。

另外,如果我将[10,2] 替换为[10],那么它会运行,但a 列中的第一个条目不是包含单个条目10 的列表,而是一个整数。有趣的是,即使使用 (10,) 代替 [10],也会发生这种情况。

我的猜测是它认为右侧是某种索引,因此是“多索引错误”。


【问题讨论】:

  • 是的,错误是不同的,因为老问题。
  • 是的,完全是:-)——最好重新打开这个,但我想这并不重要。专家肯定会立即看到这两个问题之间的关系,但像我这样的初学者可能不会。实际上,正在使用不同的命令并给出不同的错误:-)
  • 顺便说一句,我认为在 pandas 中使用 lists 不是 good idea
  • @jezrael 感谢您的建议有理由。因此,高层人士经常说“这是个坏主意”,但拒绝详细说明。使用新手应该只接受权威。使用tuples 而不是lists 好吗?我正在使用一个包含一些“评级”列表并输出新的“评级”列表的包;这些“评级”是floats。当然,我可以将数据存储numpy 数组,然后转换为列表/元组以传递给包的函数。不过,这是很多转换。你会推荐这个吗?

标签: python pandas dataframe multi-index


【解决方案1】:

使用df.at,因为它一次只能访问一个值,因此您可以轻松地分配一个列表。

df.at[0, "a"] = [10,2]

【讨论】:

  • 很好,我不知道.at 谢谢!
猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 2016-12-07
  • 2019-04-13
  • 2019-01-28
  • 2021-08-02
  • 1970-01-01
相关资源
最近更新 更多