【python】numpy pandas 特性(随时更新)

【value map】

用df.replace(dict)可以解决。但是如果dict太大,会非常非常慢。

 

【level调换】

df = df.swaplevel(0, 1, axis=1).sort_index(axis=1)

 

【array相加的维度规律】【广播】

(2,3) 能和 (3,) 相加,不能和(2,)相加

(2,3) 能和 (2, 1) (1, 3)相加,

同理,对于三维数组来说

(2, 3, 4)能和(4, ) (3,4)相加 —— 高维和低维相加的时候,低维默认是从后面数的维数

(2,3,4)能和(2,3,1) (2,1,4) (1,3,4)相加

(2,3,4)能和(2,1,1) (1,3,1) (1,1,4)相加

 

【panel取出dataFrame的index和columns问题】

假设(2,3,4)的panel([0,1], [a,b,c], [d,e,f,g])

按第一维取, 没问题([a,b,c], [d,e,f,g])

按第二维取,第三维是Index ([d,e,f,g], [0,1])

按第三维取,第二维是Index ([a,b,c], [0,1])

 

【按条件取数组】

df1[df2 == 0.], 那么df2 !=  0.的部分会置为np.nan

 

【numpy数组合并】

1、横向

>>> np.hstack((a,b))
>>> np.concatenate((a,b),axis=1)

2、纵向

>>> np.vstack((a,b))
>>> np.concatenate((a,b),axis=0)

【添加记录与记录合并】

dataFrame添加一条记录:df.loc[index] = columnsList

不看index的添加一条记录:df = df.append(series, ignore_index=True)

dataFrame记录合并:df = df.append(df2, ignore_index=True)

 

【upsert记录】

df = pd.concat([ df1[~df1.index.isin(df2.index)], df2 ])

 

【2维数据转化为3维数组】

df1 = df[None, :]
等价于df1 = df.reshape(1, x, x)

df2 = np.repeat(df1, n, axis=0)

 

【3维数据转化为2维数据】

pd.Panel().to_frame()

但是比较大的数据可能会出问题。

如果使用numpy, 比如转换 n * m * 3的数据为 3 * (n*m) 的数据:

参考https://stackoverflow.com/questions/32838802/numpy-with-python-convert-3d-array-to-2d

首先使用 np.transpose 把 n * m * 3 转换为 3 * n * m,data.transpose(2, 0, 1)

然后用reshape(3, -1)解决。

 

【numpy drop na】

drop列

xNew1 = xNew[:, ~(np.isnan(xNew).all(axis=0))]

drop行

xNew1 = xNew[~(np.isnan(xNew).all(axis=1))]

 

【按天操作】

df.resample('d').sum()

 

【ewma的用法】

alpha = 1 / (1+com) = 2 / (1+span) = 1 - exp(log(0.5) / halflife)

对于span=3来说

x = range(n)

y大致上为x-1,因此相当于最新3个平均

 

如果adjust:(default)

weights:   (1-alpha)**(n-1) , ... , (1-alpha), 1 加权

如果alpha=1, 那么等于本身

如果alpha=0, 那么等于平均

如果n足够大, alpha=1/2,  那么权重为1/2, 1/4, 1/8 ...

如果n足够大,alpha=1/3 那么权重为1/3, 2/9, 4/27 ...

alpha越大, 本身的权重越大。

如果不adjust:

weights: y[i] = alpha * x[i] + (1 - alpha) * y[i-1], y[0] = x[0]

 

 

【精度问题】

(x - x.mean()).sum() 不为0...

尽量不要这么做, 正确做法是 x.sum() - blahblah,这样精度损失比较小。。。

一般来讲一个数精度大致上是-30量级的, 但是很多会到-17这个量级。。要知道Mean才只是-14量级啊。。。

讲真真的是智障。。。

 

【一些trick】

panel当dtype不是object的时候,.loc = xxx 会出现奇怪的问题。

 

【按index排序】

sort_index

 

【pandas不包含的切片】

x[x.index < startDate] = np.nan

转载于:https://www.cnblogs.com/yesuuu/p/6226315.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值