【问题标题】:In pandas, what is the difference between [list] and [[list]]?在 pandas 中,[list] 和 [[list]] 有什么区别?
【发布时间】:2020-07-21 22:36:05
【问题描述】:

如果这个问题已经回答了,我很抱歉,但我真的不知道其中任何一个的不同名称(对象或列表或数组?),所以我仍然感到困惑。

我只是好奇这个问题的后续行动。

Pandas: Getting "TypeError: only integer scalar arrays can be converted to a scalar index" while trying to merge data frames

Ilyas 的答案。

为什么[[list]] 导致错误

只有整数标量数组可以转换为标量索引

[list] 没有?

【问题讨论】:

  • ['a'] 是一个字符串列表(大概),[['a']] 是一个字符串列表的列表。为什么一个会成为另一个的有效替代品?如果我在该列表中编制索引,期望得到一个字符串,然后得到一个列表,那么 TypeError 是最可能且最容易调试的结果。
  • 我明白了。谢谢!我现在才意识到这一点。

标签: python pandas


【解决方案1】:

您在链接问题中谈到的相关代码是:

df1 = pd.DataFrame({'a': [1, 2]})
df2 = pd.DataFrame({'b': [3, 1]})

df1.columns = [['b']] # WRONG
df1.columns = ['b']   # CORRECT

df1.merge(df2, on='b')

df.columns 必须是列标签的列表1,每个标签代表一列的名称。在错误的版本中,您将其设置为单元素列表,其元素本身就是一个列表(不是字符串),因此会出现错误。


1 列标签 直接来自documentation of DataFrame.columns,字符串是一种有效值(虽然不是唯一的,请参见下面的 cmets)。另一方面,列表会生成一个 MultiIndex(在“错误”版本之后尝试 print (df1.columns)),这会导致稍后调用 merge 时出现问题。

【讨论】:

  • df.columns 必须是字符串列表,每个字符串代表一列的名称。 不正确...试试df1.columns = [('a',)]
  • 公平点,我不太确定是否允许其他可散列类型。 documentation 谈论“列标签”,但我想这比字符串更广泛。我会调整答案
  • 感谢您的清晰解释!我现在明白了。 ^_^
  • df1.columns = [['b']] 这不会给出错误,它将[['b']] 转换为MultiIndex,此错误与merge 有关不是 df.columns。跨度>
  • @Ch3steR 不是merge 失败,因为它在底层使用['b'] 来尝试在数据帧中建立索引(columns 是一个带有setter 的属性,可以转换为多索引,或者我们是否会覆盖列表并稍后面临后果?我找不到有关此的任何信息)?设置columns 本身并不会引发错误,但它是它的根源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 2010-10-15
  • 1970-01-01
  • 2020-08-20
  • 2019-03-15
  • 2012-09-26
  • 2011-04-07
相关资源
最近更新 更多