因为时不时要做一些数据分析,和基于量化的数据验证,每次使用pandas的时候都需要百度查询,
所以把一些常用的tips记录下来,备忘
基于条件操作某些行列
- 例如某个值<0 则设置为0 data['influence']=data['influence'].map(lambda x: x if x >0 else 0)
- 获取特定条件的列,df[df['ticker']==tk],ticker==tk 的列
合并或者join
- 使用 join 的话,比如 基于 ticker 来join,新的dataframe 会有两个 ticker_left, ticker_right; 需要自己做命名区分;
- 使用merge 的话,ticker 只有一个,更加实用;merged = pd.merge(graph_fs,market_pd,on='ticker',how='inner')
删除行列、转置
- 删除p1.drop(columns=['product','Unnamed: 0'],inplace = True)
- 以某列的统计值,新增一行或者一列;fs['min']=fs.min(axis=1)
- 重新设置列名,fs.columns=['p','v','p_v']
- 行列转置, fs=p1.T; T 为转置
构建dataframe
- 从csv 文件,read_csv, 可以指定 data_type
- 从二维数组,pd.DataFrame(np.array(all_res),columns=clos)
- 取一个dataframe 部分列 df= df[[columns]]
求跨期的同环比
- 比如,三天后减去当前,通常使用shift;idx_df['closeIndex'].shift(-window) / idx_df['closeIndex'] - 1.0
python 的list 的表达式写法
- return [ x for x in cols if x not in filterOut] ,for 循环里面直接写条件
对 dict 按照值排序
- s_res = sorted(res.items(), key=lambda x: x[1], reverse=True)
loc 的用法
- 随机取1000条,news.iloc[random.sample(range(news.shape[0]), k=1000), :], 其中 pd.loc[[list1],[list2]], list1 可以指定 行的idx,list2 可以指定 列, 这里 使用 分片[:],表示所有的列。
- 选取 某列的值不再一个list中的所有数据,blackBoxSamples.loc[~blackBoxSamples.NEWS_ID.isin(remove_news_id), :]
使用bool的类型。
dataframe 排序
- 按照某一列排序 not_recall.sort_values(by="theme_name" , inplace=True, ascending=True)
网友评论