df.rolling
1、函数原型及参数说明:
DataFrame.rolling(window, min_periods=None, freq=None, center=False, win_type=None, on=None, axis=0, closed=None)
window:表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗的大小。pandas offset相关可以参考这里。
min_periods:最少需要有值的观测点的数量,对于int类型,默认与window相等。对于offset类型,默认为1。
freq:从0.18版本中已经被舍弃。
win_type:窗口类型,默认为None一般不特殊指定,了解支持的其他窗口类型,参考这里。
on:对于DataFrame如果不使用index(索引)作为rolling的列,那么用on来指定使用哪列。
closed:定义区间的开闭,曾经支持int类型的window,新版本已经不支持了。对于offset类型默认是左开右闭的即默认为right。可以根据情况指定为left both等。
axis:方向(轴),一般都是0。
# 计算均线
df['median'] = df['close'].rolling(n, min_periods=1).mean()
计算均线的时候,n表示向前n个数,min_period=1表示最少有1个数,.mean()表示求均值。即对dataframe中'median'这一列前n个数求均值,求出来的数即为简单易懂平均线。
pandas选取数据总结
最重要的就是熟悉各种切片操作是开区间还是闭区间。
主要分为几种情况:
1、选取某一行
这种情况直接使用df[中间写条件]来选取满足条件的行
a.整数索引切片:前闭后开
df[0:1] # 选取第一行,前闭后开
b、标签索引切片:前闭后闭
df[:'a'] # 选取索引为a的行
df['a':'b'] # 选取索引a到b的行,前闭后闭
c、布尔数组方法
df[[True,True,True,False,False,False,False,False,False,False]] # 选取True对应的行
d、选取附带条件的行
第二行代码实质上用的是布尔方法,df['age']>30输出的是一个布尔数。
df[[each>30 for each in df['age']]] # 选取age>30的行
df[df['age']>30] # 选取age>30的行
df[(df['age']>30) & (df['isMarried']=='no')] # 选取age>30且isMarried=='no'的行
二者的区别在于df.loc是通过索引进行选取,df.iloc是通过
df.loc[condition1 & condition2, 'signal_long'] = 1 # 将产生做多信号的那根K线的signal设置为1,1代表做多
2、选取某一列
a、通过某一列的名字选取
df[['name','age']] # 选取name和age列数据
b、选取第n列
df[lambda df: df.columns[0]] # 选取第一列
3、区域选取loc方法
总结一下:
a、逗号前面是选取行的条件,逗号后面是选取列的条件
b、loc方法区间前闭后闭
c、只能使用标签索引,不能使用整数索引
df.loc[['a','b','c'], :] # 选取a,b,c三行
df.loc['a':'d', :] # 选取a到d行
df.loc[[True,True,True,False,False,False], :] # 选取True对应的行
df.loc[df['age']>30,:] # 选取age>30的行
df.loc[lambda df:df['age'] > 30, :] # 选取age>30的行
df.loc[:, 'name':'age'] # 选取name到age列
df.loc[:, ['name','age','isMarried']] # 选取这三列
df.loc[:, [True,True,True,False]] # 选取True对应的列
df.loc[df['age']>30,['name','age']] # 输出age>30行的name和age
4、区域选取iloc方法
总结一下:
a、逗号前面是选取行的条件,逗号后面是选取列的条件
b、loc方法区间前闭后开
c、只能使用整数索引,不能使用标签索引
df.iloc[1, :] # 选取第二行
df.iloc[:3, :] # 选取前三行
df.iloc[[1,3,5],:] # 选取2、4、6行
df.iloc[[True,True,True,False,False,False], :] # 选取True对应的行
pandas合并操作
append操作:将df1和df2上下拼接起来
ignore_index=True意思就是我把两个df拼接起来之后,index就不再是以前df中的index,而是形成新的index;如果不写这个参数,合并后的df还是原来的index。
如果df1和df2的列数不一样,加一个sort = True参数。
df3 = df1.append(df2, ignore_index=True) # ignore_index参数,用户重新确定index
merge操作:左右合并
suffixes=['_left', '_right']意思就是来自左边的df索引加个_left后缀,来自右边的df索引加_right后缀,这个参数可有可无。
df_merged = pd.merge(left=df1, right=df2, left_on='candle_begin_time',right_on='candle_begin_time',suffixes=['_left', '_right'])
df.drop()
删除指定的行和列
DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)
labels 就是要删除的行列的名字,用列表给定
axis 默认为0,指删除行,因此删除columns时要指定axis=1;
index 直接指定要删除的行
columns 直接指定要删除的列
inplace=False,默认该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe;
inplace=True,则会直接在原数据上进行删除操作,删除后无法返回
np.floor()
返回不大于这个数的最大整数