import pandas as pd
'''Series 的构建案例1:股票持仓变动'''
s1 = pd.Series([100,-120,130],index=['000001.SZA','600010.SHA','300001.SZA'])
s1
'''Series 的构建案例2:混合数据类型'''
s2 = pd.Series([1,'小明',{'a':1,'b':2}],index=range(3))
s2
'''DataFrame 的构建案例1:股票所属板块'''
df1 = pd.DataFrame({'instrument':['000001','600010','300001'],'plate':['深圳主板','上证主板','创业板']}, index=range(3))
df1
'''DataFrame 的构建案例2:时间日期索引的构建'''
dates = pd.date_range('2/6/2017', periods=5, freq='D')
df2 = pd.DataFrame( np.random.randint(1,100,(5,4)), index=dates, columns=['open','hgih','low','close'])
df2
'''DataFrame 的文件保存输出,默认新建文件/覆盖原文件'''
df2.to_csv('xxx.csv')
'''DataFrame 的文件保存输出,mode来控制追加写入'''
df2.to_csv('xxx.csv',mode='a', header=None)
df = DataSource('bar1d_CN_STOCK_A').read(['000001.SZA','300023.SZA'],'2017-02-10','2017-02-15',fields=['close','open','high','low','adjust_factor'])
'''查看一个DataFrame的前/后N行数据, 使用head(N)或者tail(N)'''
df.head(5)
'''真实收盘价格的计算'''
df['close_actual']=df['close']/df['adjust_factor']
df.head()
'''获取DataFrame的列, 返回带索引的Series'''
df.date # 或 df['date']
'''平台默认获取数据得到的时间date列类型为numpy的datetime64格式'''
df.date.values[0]
'''datetime64格式转化为字符串格式'''
np.datetime_as_string(df.date.values[0]) # 或 str(df.date.values[0])
'''numpy.datetime64格式转为pandas.Timestamp格式'''
pd.to_datetime(df.date.values[0])
'''Timestamp格式转为字符串格式'''
pd.to_datetime(df.date.values[0]).strftime('%Y%m%d')
'''Timestamp格式做日期加减'''
pd.to_datetime(df.date.values[0]) + pd.Timedelta(days=1)
'''计算时间差'''
delta = (pd.to_datetime('2019-01-10') - pd.to_datetime('2019-01-05'))
print('时间间隔天数:',delta/np.timedelta64(1,'D'),'时间间隔分钟数:',delta/np.timedelta64(1,'m'),'时间间隔秒数:',delta/np.timedelta64(1,'s'))
'''时间的批量处理'''
df['date_str'] = np.datetime_as_string(df['date'])
df['date_Timestamp'] = pd.to_datetime(df['date'])
df[['date','date_str','date_Timestamp']]
df.head()
df.set_index('date',inplace=True)
df.head(5)
df.reset_index(inplace=True)
df
df.sort_values(by=['date','close'],ascending=[False,False])
df[df.close>10]
'''使用loc[行过滤条件,列过滤]方法实现行和列的过滤, 例如获取close_actual大于10的各行数据,并截取instrument、low、high三列'''
df.loc[df['close_actual']>10, ['instrument','low','high']]
'''选取第一行的数据'''
df.iloc[0]
'''按位置选取第一行、第一列的元素'''
df.iloc[0,0]
df.set_index('date',inplace=True)
df.head()
'''获取2017-02-14到2017-02-15的所有数据'''
df.loc['2017-02-14':'2017-02-15',['instrument','close']] # 或 df.loc[np.datetime64('2017-02-14'):np.datetime64('2017-02-15'),['instrument','close']]