随手记
- 注意点
- &、| 是位运算,and、or是逻辑运算
- and\or 短路计算
1.在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。- 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
- and\or 短路计算
- is 判断是否是否一个对象,== 比较值是否相等
- 若果 a is b 为真,则 a == b 亦为真
- return 只能用在function里
- 读取excel中文乱码,由于excel一般是gbk编码无utf-8,pd.read_csv读取时设置参数enconding='gbk'
- 字符串前加 r 可以防止转义
- 中文字符前加u代表以unicode格式存储
- 删除变量:del
- 数据读取 encoding成 'utf_8_sig'
- 索引、视图、副本
- .ix不会修改原df; .iloc.loc会修改原df
- http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
- &、| 是位运算,and、or是逻辑运算
内置
-
List
- list相加相当于合并list (list.extend())
> [] + [1] + [2,3] [1,2,3,4]
-
String
-
s.join() # 字符联接
-
yield
- 迭代器(list,string,tuple),可迭代
- 生成器自动实现了迭代器协议,是可迭代的对象。生成器可以一边计算一边生成,节省了内存。
- 带有 yield 的函数就是一个生成器函数,它不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。
-
map(func, seq1[, seq2...])
- 将func作用于seq的每一个元素中,并以列表形式返回。
- func为None时相当与zip()
-
reduce(func, seq[, int])
- reduce每次迭代将上一次的迭代(第一次为int, 若无int则取seq第一个元素)结果与下一个元素传入func中。
- e.g. 阶乘计算 reduce(lambda: x * y, range(1, n+1))
Ipython
ctrl / -- 注释
- Magic Commands
%time 计算耗时
Pandas
- 空值处理
df.isnull().any() 是否存在空值
df.isnull().sum() 统计空值个数
df.fillna(value) 空值填充
# value : scalar, dict, Series, or DataFrame
# e.g. df.fillna(df.mean())
- 数据探查
df.info() 基本信息
df.describe() 基本统计信息
df.get_dtype_counts() 统计数据类型
df.select_dtype(include=['O', 'int64']) 选取特定类型数据, include/exclude 的值为list
df.select_dtypes(include = ['O']).apply(lambda x: len(x.unique())) 变量不同值的个数
apply(pd.Series.nunique()) 变量不同值个数 len(unique()) #faster
pd.Series.value_counts()
pd.Series.pct_change() # 环比
- 数据合并
pd.concat() # 按指定 axis 合并,axis=1代表列合并
pd.merge() # 按列索引合并(SQL)
pd.join() # 多用于 行index
- 数据处理
pd.replace() 值替换 # 可事先构造mapping_dict = {'F1':{'A':0, 'B':1}, 'F2':{1:9, 2:8}}
pd.Series.map({})
df.drop_duplicates(subset=) 去除重复值
pd.pivot_table() 数据框重塑
pd.groupby().fun().unstack()
pd.rest_index()
- 可视化
df.hist() 绘制柱状图
df.plot.bar(figsize=(,), stacked=True)
df.plot(kind) # kind: 'line', 'bar', 'barh', 'kde'
fig, (axis1,axis2) = plt.subplots(1,2,figsize=(15,4)) # 多幅图设置图片坐标
- 日期时间处理
pd.to_datetime(Series/String, error=) # 转成日期格式
datetime.weekday(); datetime.weekday_name # 转成星期
datetime.quarter(); # 季度
datetime.weekofyear(); # 周
pd.Series.dt.weekday # use .dt to access properties
pd.date_range(start=None, end=None, periods=None, freq='D')
numpy
- 数值计算
np.log1p() # Return the natural logarithm of one plus the input array
scipy
- 数据统计
scipy.stats.skew() 计算峰度
- sparse 数据处理
from scipy import sparse
sparse.hstack().tocsr() # stack sparse matrices horizontally
注: 稀疏矩阵存储: compressed sparse row (CSR),Coordinate(COO)
网友评论