【发布时间】: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