Pandas 是一个强大的分析结构化数据的工具,它基于 Numpy(提供高性能的矩阵运算三方库),是 Python 数据挖掘和数据分析领域的事实标准三方库。
这里有很全面的Pandas教程:pandas 教程,该教程不需要去先学习 python 和 numpy 库。
pandas如何创建
假设有个表格类数据,每列的列明是columns = ['arm_index','label','true_mean']
然后用append的形式来增添每一行,比如row_list = [],然后每次有一行数据就row_list.append()这一行数据
例子:
row_list = []
for _,row in all_df_t.iterrows():
line_data = []
line_data.append(row['index']) #bs_index
line_data.append(row['label']) #label- context
line_data.append(row[type_index]) #reward in this context
row_list.append(line_data)
available_arms_df = pd.DataFrame(row_list, columns = columns)
pandas 如何取值
假设df数据如下:
- 找出某一列中最大的top个值(如2个值)
df['true_mean'].nlargest(2)
结果输出为:
24 1.0
33 1.0
Name: true_mean, dtype: float64
- 将某一列值转化为List
list_a = []
for a in df['arm_index']:
list_a.append(a)
print(list_a)
- 筛选行
data=df.loc[2:5] #这里的[2:5]表示第3行到第5行内容,[]第一个起始是0,表示数据的第一行
data_many=df[(df['列名1']== ‘列值1’)&(df['列名2']==‘列值2’)] #多条件匹配
pandas 时间类型移动窗口
点击查看代码
dft = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},
index=pd.date_range('20130101 09:00:00',
periods=5,
freq='s'))
dft
B
2013-01-01 09:00:00 0.0
2013-01-01 09:00:01 1.0
2013-01-01 09:00:02 2.0
2013-01-01 09:00:03 NaN
2013-01-01 09:00:04 4.0
dft.rolling(2).sum()
B
2013-01-01 09:00:00 NaN
2013-01-01 09:00:01 1.0
2013-01-01 09:00:02 3.0
2013-01-01 09:00:03 NaN
2013-01-01 09:00:04 NaN
dft.rolling(2, min_periods=1).sum()
B
2013-01-01 09:00:00 0.0
2013-01-01 09:00:01 1.0
2013-01-01 09:00:02 3.0
2013-01-01 09:00:03 2.0
2013-01-01 09:00:04 4.0
通过rolling()函数与聚合函数的拼接,组成新的函数,可以更方便地实现窗口函数的功能;
这种用法,功能强大,代码简单,所有参数的设置基本一致;
列举如下
rolling_count() 计算各个窗口中非NA观测值的数量
rolling_sum() 计算各个移动窗口中的元素之和
rolling_mean() 计算各个移动窗口中元素的均值
rolling_median() 计算各个移动窗口中元素的中位数
rolling_var() 计算各个移动窗口中元素的方差
rolling_std() 计算各个移动窗口中元素的标准差
rolling_min() 计算各个移动窗口中元素的最小值
rolling_max() 计算各个移动窗口中元素的最大值
rolling_corr() 计算各个移动窗口中元素的相关系数
rolling_corr_pairwise() 计算各个移动窗口中配对数据的相关系数
rolling_cov() 计算各个移动窗口中元素的的协方差
rolling_quantile() 计算各个移动窗口中元素的分位数
除了支持聚合函数,通过rolling().apply()方法,还可以在移动窗口上使用自己定义的函数,实现某些特殊功能;唯一需要满足的是,在数组的每一个片段上,函数必须产生单个值;参考https://www.jianshu.com/p/b8c795345e93
pandas Series.expanding用法及代码示例
pandas.DataFrame.expanding函数方法的使用
用法:
Series.expanding(self, min_periods=1, center=False, axis=0)
- expanding()函数的参数,与rolling()函数的参数用法相同;该窗口可生成该统计的值以及该时间点之前所有可用的数据。
- rolling()函数,是固定窗口大小,进行滑动计算,expanding()函数只设置最小的观测值数量,不固定窗口大小,实现累计计算,即不断扩展;也就是说当rolling()函数的参数window=len(df)时,实现的效果与expanding()函数是一样的。
- expanding().sum()函数,类似cumsum()函数的累计求和,其优势在于还可以进行更多的聚类计算;