0
点赞
收藏
分享

微信扫一扫

python报错:ValueError: Must have equal len keys and value when setting with an iterable// .loc() .at()

钎探穗 2022-04-21 阅读 390
pythonlist

在处理数据时,修改某个数据时,一开始直接使用数据切片进行赋值

df['math'][0] = 100

 虽然数据修改成功了,但是这种情况代码运行时会有警告:

为了解决这个警告问题,查阅了相关资料:在python中默认的切片数据类型是“只读不能写”的,可以使用loc函数定位到的是原dataframe中的列,可修改

因此尝试loc函数

df.loc[1,'math'] = 110

 数据修改成功 且没有再报warning,完美 你以为到这就结束了嘛 天真  我后面在对数据赋值列表时,报报报报报报错了:

ValueError: Must have equal len keys and value when setting with an iterable

找到了一种解决方法:

在处理数据时,修改某个数据时,一开始直接使用数据切片进行赋值

df['math'][0] = 100

 虽然数据修改成功了,但是这种情况代码运行时会有警告:

为了解决这个警告问题,查阅了相关资料:在python中默认的切片数据类型是“只读不能写”的,可以使用loc函数定位到的是原dataframe中的列,可修改

因此尝试loc函数

df.loc[1,'math'] = 110

 数据修改成功 且没有再报warning,完美 你以为到这就结束了嘛 天真  我后面在对数据赋值列表时,报报报报报报错了:

原因很简单:

1.将添加的列表转化为byte数据

2.写入

3.转换回来

df.loc[0,'all'] = np.array([89,100]).tobytes()
np.frombuffer(df.loc[0,'all'], dtype=int)

 

 

 但这样存在一个问题,如图,我虽然最后提取结果的时候能数据转化后提取出来  但是我的原表数据还是byte类型 ,这不是我想要的 ,我想要在原表上直接就得到我想要的列表。

后来我就想,数据切片会警告,loc会报错,那么at可不可以呢,尝试一下

df.at[0,'all'] = [89,100]

 成功了。。。没有警告没有报错

暂时没查到原始,但是目前证明是可行的,后续找到原因继续补充,希望不会有问题

举报

相关推荐

0 条评论