【第三章】ipython
C-a 到行首
C-e 到行尾
%timeit 测量语句时间,%time是一次,%timeit是多次。
%pdb是自动调试的开关。
%debug中,可以用b 12在第12行设置断点,n是执行当前行并进入下一行,
set_trace和debug函数也比较好用。 from IPython.core.debugger import Pdb
逐行分析函数性能:基于line_profiler的应用!在~/.ipython/profile_default/ipython_config.py 中添加 c.TerminalIPythonApp.extensions = ['line_profiler']
即可使用魔法命令%lprun 逐行分析函数的性能,调用语法为
%lprun -f func1 -f func2 statement_to_profile
【第四章】numpy
切片赋值可以用矢量或者标量,标量采用了广播机制。
布尔索引!True False可以用来切片,也可以和其他切片方式混用。两个布尔索引可以对应的,比如df[con1] = df2[con]是成立的。
df[:2][1:] = np.nan也是原数据上修改。
花式索引就是df[[2,3,4,1], :]这种,花式索引每次都是复制新数据!两维都花式索引比较难,需要df[[0,1]][:, [0,1]]这样,或者df[df.ix_([0,1],[0,1])]
np.where是x if con else y的矢量化版本。np.where(con=TrueFalseArray, x, y)。x, y可以是与con一样size的矢量,也可以是标量
和&,或|,非-(负号)。
np.sort返回已排序副本,就地排序会修改数组本身
arr.unique()与sorted(set())输出相似, in1d(target, base)测试成员资格,unique(x), intersect1d(x, y), ...这些都是集合运算
【第五章】pandas
有特殊的Index类,index对象不可修改,有 is_monotonic 和 is_unique 方法 。series.reindex(index)根据新的index进行重排
apply方法(输入某个函数),按照行或者按照列进行计算
默认排除na值,使用skipna=False禁用
reindex和set_index,
【第六章】数据加载
对于没有列名的csv, 两个方法header=None, names=[]
其中一列当作index, names=[xx, 'message',xx, xx, xx], index_col='message'
【第七章】数据规整化:清理、转换、合并、重塑\
pd.merge 根据一个或者多个键连接record
如果两边键相同,通过on指定,如果键不同,通过left_on, right_on指定。
通过how可以指定连接方式,默认是交集inner,可以选择left, right, outer
combine_first: 填补缺失数据的方法
【第九章】数据聚合与分组运算
groupby是一种分组运算的方法,包含三个步骤:拆分-应用-合并
1、拆分:按照某个键将数据分类:data.groupby(key)
2、应用、合并:将某个函数应用并且计算grp.mean(), grp.agg(func)
【第十章】时间序列
按天group
df.index = pd.to_datetime(df.index)
df.groupby(pd.TimeGrouper('D'))
取每天的同一时间
df.loc[datetime.time(9, 30)]
按每天的同一时间group
data.groupby(data.index.time)