column这里的copy参数的实际作用不理解。
import pandas as pddata = {'col1':[1,2,3],'col2':[1,2,3]}#index设置的是行标签,而column设置的是列标签dataf0 = pd.DataFrame(data=data,index=['col1','col2','col3'],columns=['col1','col2'])print(dataf0.info())print('------')#这里只会返回dataf0中的indexprint(dataf0.index)#这里只会返回dataf0中的columnsprint(dataf0.index)print(dataf0)
这里就搭配索引相关的来给出实例,同时再引入一个工具库tushare,这个工具可以获取一些指定股票的信息。为了节约时间,我将使用tushare获取一只股票的信息,导出为一个csv文件,直接使用文件来操作,避免每次获取的耗时。
maotai.csv
这是获取方式:
import tushare as ts#获取茅台的股票信息data = ts.get_k_data(code='600519',start='1900-01-01')print(data)#生成csv文件data.to_csv('D:\maotai.csv')
shift,resample
实例1:
import pandas as pddf = pd.read_csv('D:\maotai.csv')#获取指定的行数,head是正序,tail是倒序。print(df.head(1))print(df.tail(1))#获取单个值,这个函数在什么场景会被频繁使用呢?最好不要是需要大量循环遍历的,那样就用的麻烦了。print(df.at[0,'date'])print(df.iat[0,1])#获取一列,不知道为什么不能使用columns来获取一列,只能指定index来获取,这里需要注意,使用set_index后的column也不能使用。#除了获取列外,这个函数还能处理只有布尔值的列,返回为True的列。#这里返回的是一个布尔数组print( (df['close'] - df['open']) / df['open'] > 0.03 )print(df.loc[ ( df['close'] - df['open']) / df['open'] > 0.03 ]['date'])#items()返回俩个元素来迭代dataframe中的columns,及其元素。将之拆分成单个的Series.#可以单个columns的获取,当想单个处理columns是会比较方便,当然与直接使用df[]相比较的话,也需要看使用场景了for i,n in df.items():print(f'i:{i}')print(f'n:{n}',sep='\n')for i,n in df.items():if i == 'date':print(f'i: {i}')print(f'n:{n}')#iterrows,itertuples都是将row迭代出来,只是格式有些不一样。print(next(df.iterrows())[1])for i in df.iterrows():print(i)for i in df.itertuples():print(i)#获取dataframe的columns在一个列表中,可以用迭代的方式来获取列名。print(df.keys())columns = df.keys()for i in columns:print(i)
思考一个问题,对于数据类型的有效转换,比如时间。
import pandas as pddf = pd.read_csv('D:\maotai.csv')#这里有两种方式可以转换时间类型,不过需要将转换后的值再次赋值给'date',否则无法真正转换类型df['date'] = df['date'].astype('datetime64')print(df.info())df['date'] = pd.to_datetime(df['date'])print(df.info())
import pandas as pdimport tushare as tsimport matplotlib.pyplot as plt'''绘制若干日的曲线图data = ts.get_k_data('000001',start ='1900-01-01')print(data)data.to_csv('D:\pingan.csv')'''df = pd.read_csv('D:\pingan.csv')print(df.head(10))df.drop(labels = 'Unnamed: 0', axis=1,inplace=True)print(df.head(10))print(df.info())df['date'] = pd.to_datetime(df['date'])df.set_index('date',inplace=True)print('------------------------')#?df['close'].rolling(5)ma5 = df['close'].rolling(5).mean()ma30 = df['close'].rolling(30).mean()print(ma5)#金叉,死叉?plt.plot(ma5[50:300],label='ma5',c='red')plt.plot(ma30[50:300],label='ma30',c='blue')#去除nan值ma5 = ma5[30:]ma30 = ma30[30:]s1 = ma5 < ma30s2 = ma5 >= ma30s1 & s2.shift(1)df.loc[s1&s2.shift(1)]plt.show()
