2022-09-02
1.今天做需求的时候遇到这样一个警告,
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
原因是我做了这样的操作,我先是用.loc从一个大的dataframe上筛选了一部分列赋值到一个新的变量里,然后我再给这个新的变量添加一个列时触发了这个警告,查了一下,这个警告的根本原因是,我的这个新变量可能是原来那个大的dataframe的一个副本,也有可能是一个view也就是视图,如果是视图,那我新的变量发生改变,原始数据也会改变,这样在某些情况可能出现问题,但是我这个新变量是副本还是视图,取决于具体是什么情况,所以这块它报了个警告,意思是可能会出问题,因为它不知道是视图还是副本,当然我们自己知道我们是怎么用的,为了不显示警告,可以显式告诉pandas,我这个是副本,这样就不会出问题了。代码如下
import numpy as np
import pandas as pd
a = df.loc[:,'a'].copy()
a['b'] = np.arange(10)
2. 在窗口类里创建线程处理耗时任务时一定要用成员变量,不然,线程就会直接被销毁,之前一直用的成员变量,今天突然用了个局部变量,直接报错了,排查了半天。
3.pyqt5中,比如我创建了个按钮,如果我写了两次button.clicked.connect(xxx),那么,当你点击按钮的时候,槽函数就会执行两次,今天因为加了其它按钮,就直接复制之前写的代码,多写了一个连接的代码,没想到程序一下子不按计划执行了,排查了半天,后续应该注意了。
4.pandas的cumsum函数,这个函数表示累加,什么是累加,和直接求个和有什么区别,我看了半天,简单来说就是,求和的结果是一个值,累加和是多个值,什么意思,比如说,我有三个数,1,2,3,求和就是1+2+3=6,最后返回一个结果6,但是cumsum返回1,3,6,就是说,它是把一个数的和,两个数的和,三个数的和全部记下来,最后得到的是一个series,这就是sum和cumsum的区别。摘段代码
import pandas as pd
import numpy as np
s = pd.Series([2, np.nan, 5, -1, 0])
print(s)
print(s.cumsum())
这个方法适合单个数据只反映数据变化而不是数据值的情况,比如,正值表示增加,负值表示减少,它不代表最后的值是多少,这时用cumsum就能算出最终的结果的趋势,大概这么个意思。
5.python list.pop(index),index默认是-1,也就是从最后一个元素开始pop,但是也可以自己指定,这个一般是当栈或队列使用,一般情况,我们不会删除列表元素,多数是遍历,取值等。