【问题标题】:Preventing Broadcasting in Pandas [duplicate]防止在 Pandas 中广播 [重复]
【发布时间】:2019-11-01 06:29:11
【问题描述】:

我们有将数组填充到数据框中的代码(是的,我知道,这不是最佳实践)。

df.at[index,'alist'] = list(alist)

alist是一个列表,但是广播阻止了操作,所以list(alist)被用来阻止广播并允许操作。

随着最后一组源库更新list(alist)开始广播,导致此行失败并出现错误Must have equal len keys and value when setting with an ndarray

关于如何纠正的任何想法?

【问题讨论】:

  • “导致这条线失败”,你遇到了什么错误?
  • 你分配给一个单元格,这里真的没有广播。
  • @cs95 谢谢,问题已更新并包含错误消息。

标签: python pandas numpy


【解决方案1】:

at 不会为您转换 dtypeloc 会出错,因为它假定您正在尝试将列表推送到多个单元格中。

转换您的dtype,然后使用at

df = pd.DataFrame(1, range(10), [*'ABC'])

df = df.astype({'A': object})

df.at[2, 'A'] = [1, 2, 3]

df

           A  B  C
0          1  1  1
1          1  1  1
2  [1, 2, 3]  1  1
3          1  1  1
4          1  1  1
5          1  1  1
6          1  1  1
7          1  1  1
8          1  1  1
9          1  1  1
​

【讨论】:

  • This was my suspicion as well,但我原以为这会抛出 ValueError: setting an array element with a sequence. 他们的错误消息似乎另有说明,但我认为 dtype=object 转换应该可以解决它。
  • @cs95 这是这个 dup imo 的目标
  • 也许,也许不是。他们的错误信息与我们的代码产生的不同这一事实仍然困扰着我......
猜你喜欢
  • 1970-01-01
  • 2017-09-03
  • 2014-01-25
  • 1970-01-01
  • 2018-08-12
  • 2021-07-23
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多