1. 绘图显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
2. 将数组转为字符串
str.join() 用str将括号内的字符连接起来
stack = ['a','b','c']
"".join(stack)
输出'abc'
3.
df_month[‘Price’] 是pd.Series
df_month[[‘Price’]] 是pd.DataFrame
4. 判断一个月有多少天
calendar.monthrange(2020, 10)
5. 倒序循环
for i in range(30,3,-1)
for i in reversed(range(30))
6. 占位符循环
占位符有很多,%d、%s之类,https://blog.csdn.net/coberup/article/details/82856910
['var%d(t-%d)' % (j + 1, 4) for j in range(10)] 或是
["var{}".format(i) for i in range(3)]
遇到<generator object at0x7fab68a9a9d0>,这种运行成功但无法显示的情况,可以考虑加加括号,或者外面加个list。
还可以用f,大括号里的是变量
f"{self.event_type} event at {self.datetime}"
7. continue 与 break
- continue: 若满足if判断,则直接开始下一次循环,本次循环不再继续执行完
def func():
for i in range(1,11):
if i % 2 == 0:
continue
print(i)
func()
运行结果:1,3,5,7,9
- break:一旦if条件被触发,就停止当前循环
def func2():
for i in range(1,11):
if i % 2 == 0:
break
print(i)
func2()
运行结果:1
8. pd.concat两个df时,会自动根据索引取交集
df1
A B
0 1 2
1 3 4
df2
C B
0 5 2
1 7 4
pd.concat([df1,df2],axis=1)
输出为
A B C B
0 1 2 5 2
1 3 4 7 4
pd.concat([df1,df2],axis=0)
输出为
A B C
0 1.0 2 NaN
1 3.0 4 NaN
0 NaN 2 5.0
1 NaN 4 7.0
9. 创建一个固定长度的list:
a = [1] * length
10. 地址
import ctypes
value='hello world' #定义一个字符串变量
address=id(value) #获取value的地址,赋给address
get_value=ctypes.cast(address, ctypes.py_object).value #读取地址中的变量
print(get_value)
10. floor,ceil,sqrt
不用numpy的话,全部在前面加math,如math.floor
11. 解压
# 路径如果用反斜杠,要在前面加r
# 路径要精确到rar
# 也可以直接用相对路径,正斜杠
import rarfile
rf = rarfile.RarFile("./future2015/FutAC_TickKZ_CTP_Daily_201501.rar")
for f in rf.infolist():
print(f.filename)
12. 数据格式转化
dataframe里面一定要用astype,不能str(xxx)
df['date'].astype('str')
13. 判断时间先后
str时间格式可以直接判断
‘23:58:59’<‘23:59:59’
14. 读取文件
encoding = ‘utf-8’,‘gbk’,‘gb2312’
15. plt
plt.gca()获得当前的Axes对象ax
plt.title("title")
x = [1, 2, 3, 4]
labels = ['Frogs', 'Hogs', 'Bogs', 'Slogs']
plt.xticks(x, labels, rotation='vertical')
用labels的值取代图中坐标上的x,rotation是label的旋转角度
plt.margins(0.2)
plt.ylabel('True label')
16. dataframe里根据值定位
df[df==3] = 30
17. dataframe里把bool型掩码换成某个数值
https://www.jb51.net/article/141653.htm
df.replace()
df.where(df.isin([1, 3, 12]),other=30)
18. pd.series
- 如果要取series的第一列,如果用s.iloc[0],只能得到一个数,得不到series,要用s.iloc[0:1]
- 插入, insert(位置,data),extend(data), append(另一个series)
- 删除,del s[3],Series.pop(index),s.drop([2,3])
19. inf, nan
可以表示为np.inf, np.nan
20. __slots__
https://blog.csdn.net/sxingming/article/details/52892640
21. __str__
返回一个对象的描述信息
22. 单下划线和双下划线
变量前的单下划线表示表面上私有,变量前的双下划线表示真正的私有
23. *args和**kwargs
https://zhuanlan.zhihu.com/p/50804195
*args就是传递一个可变参数列表给函数,列表的数目未知;
**kwargs则是将一个可变的关键字参数的字典传给函数
def test_kwargs(**kwargs):
for k, v in kwargs.items():
print ((k, v))
if 'k2' in kwargs:
print(kwargs['k2'])
test_kwargs(k2=6)
输出
('k2', 6)
6
当函数的形参是**kwargs的时候,在给函数传参的时候,不能传字典进去;函数里的kwargs是个字典
def test_args_kwargs(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
test_args_kwargs(**kwargs)
当函数的形参不是**kwargs的时候,调用函数的时候,可以使用**kwargs
24. 判断每个值出现了多少次(value_counts())
data['weekday'].value_counts()
25. 时间
np.datetime64('today','D')
np.timedelta64(1,'D')
pd.to_datetime(...)
df['datetime'].dt.week
datetime.datetime(2014,9,1)
datetime.timedelta(days=1)
26. 构建新dataframe
需要从空白搭建一个dataframe的时候,如果不方便直接往df里加数据,可以先写成list,然后再转换成df,因为list很好插入数据。
27. groupby
之后,索引默认变成group的列,如果不想变,用参数groupby(‘weekday’,as_index=False)
28. iterrows
df = pd.DataFrame([[1,2,3],[3,4,5]],columns=['a','b','c'],index=['A','B'])
for i,j in df.iterrows():
print(i)
print('--------')
print(j)
输出
A
--------
a 1
b 2
c 3
Name: A, dtype: int64
B
--------
a 3
b 4
c 5
Name: B, dtype: int64
29. groupby.count
想计算个数df[‘xx’].groupby([‘day’],as_index=False).count()
30. df中通过两列的值匹配
df长这样
A B C
0 100 2 b
1 200 a 3
2 300 a 4
现在要查找B=a,C=3的A值
for index, (B, C) in enumerate(zip(df.B.values,df.C.values)):
if B=='a' and C==3:
print(df.loc[index,'A'])
31. join
将序列中的元素以指定的字符连接生成一个新的字符串
wordslist = ['我非常喜欢看电视剧','我非常喜欢旅行']
textTest = ['aa'.join(jieba.cut(words)) for words in wordslist]
# result
['我aa非常aa喜欢aa看aa电视剧',
'我aa非常aa喜欢aa旅行']
32. queue.get(block)
- queue.put(10): 调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为True。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。
- q.get(): 调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。
- block=True 一般会和timeout搭配使用
33. try
try:
...
except ValueError:
...
except:
...
# 除了valueerror以外的错误的处理都放在这
else:
...
# 如果没有出现错误,则执行此处
finally:
...
# 不管有没有异常,都会执行此处
34. 函数传参数
这个参数如果不是值类型(比如int、string这种),那就传的是指针
35. pandas.melt
把
A B
a 2 4
b 6 8
给变成
1 2 3
0 a A 2
1 a B 4
2 b A 6
3 b B 8
代码是
df2 = pd.melt(df.reset_index(), id_vars='index',value_vars=['A','B'])
df2
其中 id_vars 是不变的基准列,value_vars 是要变的列
36. 判断变量是否为空 if not stack
stack = []
if not stack:
pass
37. tolist()
在dataframe里,需要转化为列表的话,可以用df.columns.tolist()
38. pipeline
在pipeline里会给变量名字,比如下面的pca和logistic,这个名字的意义和params里,两个下划线前面的字符一致。到了GridSearchCV里,会根据名字找对应值。
logistic = linear_model.LogisticRegression()
pca = decomposition.PCA()
pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)])
params = {
'pca__n_components': [20, 40, 64],
'logistic__C': np.logspace(-4, 4, 3),
}
estimator = GridSearchCV(pipe, params)
39. imshow
plt.imshow()热图
40. if…else…写在一行
color = ‘white’ if cm[i, j] > thresh else ‘black’
41. clf.class_, predict_proba、decision_function
https://blog.csdn.net/cxx654/article/details/106727812
- classes_属性中按顺序保存着训练样本的类别标记。
- predict_proba: 模型预测输入样本属于每种类别的概率,概率和为1,每个位置的概率分别对应classes_中对应位置的类别标签。
- decison_function: 输出样本距离各个分类器的分隔超平面的置信度
- ‘ovr’:One-vs-Rest; ‘ovo’:One-vs-One
- 计算ROC和AUC时,需要预测结果的置信度,由predict_proba或decison_function表示,如果分类器的参数中有probability=True,可以使用predict_proba,但如果probability=False,则只能使用decison_function。
42. clf.coef_, clf.intercept_
43. deque的切片
deque切片时需要使用islice
from collections import deque
from itertools import islice
a = deque(maxlen=20)
for i in range(20):
a.append(i)
list(islice(a,2,5))
>> [2,3,4]
44. 生成唯一标识符uuid
import uuid
name = 'test_name'
# namespace = 'test_namespace'
namespace = uuid.NAMESPACE_URL
print uuid.uuid1() # 全球范围内的唯一性
print uuid.uuid3(namespace,name) # 可以保证命名空间中的不同名字具有不同的uuid,
但是相同的名字就是相同的uuid了
print uuid.uuid4() # 通过伪随机数得到uuid,是有一定概率重复的
print uuid.uuid5(namespace,name)
45. 把True/False转换成1/0
import numpy as np
a = np.array([True, False])
a.astype(int)
46. 计算程序运行时间
tic = time.process_time()
# 这儿写代码
toc = time.process_time()
print("time=" + str(1000*(toc-tic)) + 'ms')
47. 对矩阵的平方求和
np.sum(np.square(W))
48. 对一组数打乱重排
p = 6
np.random.permutation(p)
49. 用numpy求数组倒序
a = np.arange(10)
a[8::-2]
输出 array([8, 6, 4, 2, 0])
a[8:1:-2]
输出array([8, 6, 4, 2])
-np.sort(-a)
输出array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
50. numpy数组去掉冗余的维度
a = np.array([[[10, 2, 3]]])
a_sque = np.squeeze(a)
51. 求一组随机数在每个数值处的个数
Z = np.random.randint(0, 10, 50)
np.bincount(Z)
52. 找出给定一维数组中非 0 元素的位置索引
Z = np.nonzero([1, 0, 2, 0, 1, 0, 4, 0])
53. Z.sort() 和 np.sort(Z)
都可以运行,但如果要赋值,只能用 Z = np.sort(Z)