防止在 Pandas 中广播 [重复]
Posted
技术标签:
【中文标题】防止在 Pandas 中广播 [重复]【英文标题】:Preventing Broadcasting in Pandas [duplicate] 【发布时间】: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 谢谢,问题已更新并包含错误消息。 【参考方案1】:at
不会为您转换 dtype
。 loc
会出错,因为它假定您正在尝试将列表推送到多个单元格中。
转换您的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 的目标
也许,也许不是。他们的错误信息与我们的代码产生的不同这一事实仍然困扰着我......以上是关于防止在 Pandas 中广播 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 json_normalize 在 Pandas 中重复列标题?