Pandas选取合并操作总结

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()

返回不大于这个数的最大整数

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值