一、pandas
1、 找出含有特定字符串的行
res=res[res['choice'].str.contains("<img")]
2、找出第一个字符是 ‘9’ 的行
res=res[res['choice'].str[0] == '9']
3、提高多层行索引的 DataFrame 的搜索效率
col
one two
c u 9
对于以上结构的两层行索引 DataFrame,采用 data.loc[(c, u), col] 取数据时,一般情况下会触发如下警告:
PerformanceWarning: indexing past lexsort depth may impact performance.
这是因为索引没有排序,而是否排序对 DataFrame 的检索效率有较大影响,只要按如下:
data = data.sort_index()
给索引排个序就可消除该警告。
4、pandas 与 numpy 计算标准差时的差别
pandas.std 默认 ddof=1,就是无偏的估计(n-1)
numpy.std 默认 ddof=0,就是有偏的估计(n)
在混合使用 numpy 和 pandas 时注意默认值的差异。
5、数据输出时列无法对齐
In[76]: ires_df
Out[76]:
行业因子平均解释力
交通运输 0.007395
传媒 0.014366
农林牧渔 0.005049
医药 0.019094
商贸零售 0.002312
国防军工 0.003610
基础化工 0.007108
目前 pandas 对中文的支持还不完美,当列名用中文之后,输出时数据没有对齐,改进办法就是对pandas的输出参数进行设定。
import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
ires_df
行业因子平均解释力
交通运输 0.007395
传媒 0.014366
农林牧渔 0.005049
医药 0.019094
商贸零售 0.002312
国防军工 0.003610
基础化工 0.007108
改进之后的格式有所改善,但是仍然有继续改进的空间。
二、numpy
1、一维数组的转置
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(f'1.原始数组 a = {a}')
print(f'2.原始数组的常规转置 a.T = {a.T}')
print(f'3.原始数组的标准转置 a.reshape(len(a), 1) = ')
print(a.reshape(len(a), 1))
print(f'4.原始数组的快捷转置 a[:, None] = ')
print(a[:, None])
Out[45]:
1.原始数组 a = [1 2 3 4 5]
2.原始数组的常规转置 a.T = [1 2 3 4 5]
3.原始数组的标准转置 a.reshape(len(a), 1) =
[[1]
[2]
[3]
[4]
[5]]
4.原始数组的快捷转置 a[:, None] =
[[1]
[2]
[3]
[4]
[5]]
三、dict
1、批量赋值
有一个字典,需要根据这个字典来构建一个对象。
class Person:
def __init__(self,_obj):
self.name = _obj['name']
self.age = _obj['age']
self.energy = _obj['energy']
self.gender = _obj['gender']
self.email = _obj['email']
self.phone = _obj['phone']
self.country = _obj['country']
利用__dict__的特性,上面的类可以用如下的代替,代码量大大减少:
class Person:
def __init__(self,_obj):
self.__dict__.update(_obj)
(笔记:简单地说,就是结构相同的两个 dict 变量之间赋值,用 dict 整体赋值效率最高)
免了在__init__方法中类似于self.something = something的方法,使用自动化实例变量
其中的__init__方法传入的参数args为dict对应于实体model中的key,value
参考自:
https://blog.csdn.net/zhangvalue/article/details/95217606