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

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

df['math'][0] = 100

python报错:ValueError: Must have equal len keys and value when setting with an iterable// .loc() .at()_第1张图片python报错:ValueError: Must have equal len keys and value when setting with an iterable// .loc() .at()_第2张图片

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

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: Indexing and selecting data — pandas 1.4.2 documentation

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

因此尝试loc函数

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

python报错:ValueError: Must have equal len keys and value when setting with an iterable// .loc() .at()_第3张图片python报错:ValueError: Must have equal len keys and value when setting with an iterable// .loc() .at()_第4张图片

 数据修改成功 且没有再报warning

完美

你以为到这就结束了嘛 天真  我后面在对数据赋值列表时,居然报报报报报报错了:

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

.loc 不能直接存入列表,可做如下尝试:

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

2.写入

3.转换回来

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

python报错:ValueError: Must have equal len keys and value when setting with an iterable// .loc() .at()_第5张图片

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

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

在使用at之前,需要先转换一下该列的数据类型,转为object

df['all'] = df['all'].astype('object')
df.at[0,'all'] = [89,100]

python报错:ValueError: Must have equal len keys and value when setting with an iterable// .loc() .at()_第6张图片

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

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

你可能感兴趣的:(python的报错与警告,python,list)