在处理数据时,想要修改某个数据,一开始直接使用数据切片进行赋值
df['math'][0] = 100
虽然数据修改成功了,但是这种情况代码运行时会有警告:
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
数据修改成功 且没有再报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)
但这样存在一个问题,如图,虽然最后提取结果的时候能数据转化后提取出来 但是我的原表数据还是byte类型 ,这不是我想要的 ,我想要在原表上直接就得到我想要的列表。
后来我就想,数据切片会警告,loc会报错,那么at可不可以呢,尝试一下
在使用at之前,需要先转换一下该列的数据类型,转为object
df['all'] = df['all'].astype('object')
df.at[0,'all'] = [89,100]
成功了。。。没有警告没有报错
暂时没查到原始,但是目前证明是可行的,后续找到原因继续补充,希望不会有问题