pandas常用操作方法
- 指定列中进行字段替换
df['tradeDate'] = df["tradeDate"].apply(lambda x: x.replace("-", ""))
- 获取df中ticker(不)在df_halt["ticker"]的数据.
df = df[~df["ticker"].isin(df_halt["ticker"].tolist())]
- 获取ticker列中首字母为0,3,6的数据
df_list = df_list[(df_list["ticker"].str.slice(0, 1) == '0') | (df_list["ticker"].str.slice(0, 1) == '3') | (df_list["ticker"].str.slice(0, 1) == '6')]
- (列)重复值处理,subset=["ticker"]指定列,keep='first'保留第一个值,inplace=True对原集合进行修改.
df_halt.drop_duplicates(subset=["ticker"], keep='first', inplace=True)
- 统计非缺失值格式,axis=0列,axis=1行,
df_count = df.count(axis=0, level=None, numeric_only=False)
- 每列缺失值个数
df.shape[0] - df.count()
- 将指定列设置为单索引
df.set_index(df["ticker"], inplace=True)
- 将指定多列设置为复合索引
df.set_index([df["ticker"], df["exchange_cd"]], inplace=True)
- 重设索引变为默认的整型索引.
df_count.reset_index(inplace=True)
- 对列重命名
df_count.rename(columns={0: u"实际总数", "index": u'因子名'}, inplace=True)
- 设置列名(与原数据列数相同最佳)
pd.columns = ['name', 'type', 'compare', 'target']
- eval关系(运算)处理:
#(VDIFF - VDEA) * 2.0 = VMACD # VOL15 - VOL5 = DAVOL
factor_list = [str for str in r if str.isalpha() or str.isalnum()] factor_list = list(set(factor_list)) exp = np.where([str.isalpha() or str.isalnum() for str in r], ["judge['%s']" % str for str in r], r) exp = ''.join(exp) exp = exp.replace('=', '-') exp = exp + '<1e-3' judge = factor_df[factor_list] # judge = judge.dropna() judge['flag'] = eval(exp) judge = judge[~judge['flag']]
- 比较两列差值是否在规定范围,同时为Nan时视为True
tag_pd["flag"] = (abs(tag_pd["LocalValue"] - tag_pd[cross_name]) <= check_tag) | (
(tag_pd["LocalValue"].isnull().values == True) &
(tag_pd[cross_name].isnull().values == True)
- 剔除空数据
fd.dropna(inplace=True)
- join连接,how='outer'获取并集,使用Nan进行填充;'inner'获取交集; ,left/right,左右连接; 默认为left.
cross_fd = cross_fd.join(factor_df_only, how='outer')
- 数据集连接,how='outer'获取并集,使用Nan进行填充;'inner'获取交集; ,left/right,左右连接; 默认为 inner.
来源"https://www.cnblogs.com/xk-bench/p/8379180.html"
- left与right:两个不同的DataFrame
- how:指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接);默认为inner
- on : 指的是用于连接的列索引名称。必须存在右右两个DataFrame对象中,如果没有指定且其他参数也未指定则以两个DataFrame的列名交集做为连接键
- left_on:左则DataFrame中用作连接键的列名;这个参数中左右列名不相同,但代表的含义相同时非常有用。
- right_on:右则DataFrame中用作 连接键的列名
- left_index:使用左则DataFrame中的行索引做为连接键
- right_index:使用右则DataFrame中的行索引做为连接键
- sort:默认为True,将合并的数据进行排序。在大多数情况下设置为False可以提高性能
- suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为('_x','_y')
- copy:默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能
- indicator:在 0.17.0中还增加了一个显示合并数据中来源情况;如只来自己于左边(left_only)、两者(both)
cross_fd = cross_fd.merge(factor_df_only, how='outer')
- 设置列属性
tag_pd['LocalValue'] = tag_pd['LocalValue'].astype('float')
///////
基本常用的.