1、在python中,我们常常遇到这种需求,就是需要给某DataFrame数据格式中满足某一条件的数据进行列表赋值,对于这种需求,如何赋值呢?下面进行测试。
2、数据构造
本次测试所构造数据如下:
3、数值修改
对于上面数据,我现在想将id为5的数据的value对应列修改成6,我们怎么改呢?
大多同学可能都会犯以下错误:使用如下语法:data[data.id == 5].value = 10
但是运行之后会发现,该列的数值并没有被修改:
这是应为你通过id进行赛选数据之后再取value的时候,此时变量已经不是在操作原来的那张表了,而是在操作一个新的变量data[data.id == 5],因此无法进行赋值:
4、正确做法
1、通过切片的方式进行赋值:
思路:首先data[data.id == 5]将数据取出来,然后在取该变量的index,data[data.id==5].index,注意此时数据类型为Int64Index格式,如下,为此我们将其转换成列表,data[data.id ==5].index.tolist(),此时就获取了所有该id的索引值。
data[data.id ==5].index.tolist() 输出:
获取所有的index之后我们就可以使用loc函数了:如下:
data.loc[data[data.id == 5].index.tolist(),‘value’] = 10
此时可以看到已经全部修改为10
2、此外,还可以使用相同长度的list进行对其修改
如我还是要讲上面的3个id值为5的数据分别修改为11,12,13:我们可以这样使用:
此时可以看到,值已经修改过来了。
3、还可以通过切片对连续数据进行修改:如下
如,我要将前面连续4组数据修改为1,2,3,4:我们可以这样使用
data[:4].value = [1,2,3,4]