column这里的copy参数的实际作用不理解。

    1. import pandas as pd
    2. data = {'col1':[1,2,3],'col2':[1,2,3]}
    3. #index设置的是行标签,而column设置的是列标签
    4. dataf0 = pd.DataFrame(data=data,index=['col1','col2','col3'],columns=['col1','col2'])
    5. print(dataf0.info())
    6. print('------')
    7. #这里只会返回dataf0中的index
    8. print(dataf0.index)
    9. #这里只会返回dataf0中的columns
    10. print(dataf0.index)
    11. print(dataf0)

    这里就搭配索引相关的来给出实例,同时再引入一个工具库tushare,这个工具可以获取一些指定股票的信息。为了节约时间,我将使用tushare获取一只股票的信息,导出为一个csv文件,直接使用文件来操作,避免每次获取的耗时。
    maotai.csv
    这是获取方式:

    1. import tushare as ts
    2. #获取茅台的股票信息
    3. data = ts.get_k_data(code='600519',start='1900-01-01')
    4. print(data)
    5. #生成csv文件
    6. data.to_csv('D:\maotai.csv')

    shift,resample
    实例1:

    1. import pandas as pd
    2. df = pd.read_csv('D:\maotai.csv')
    3. #获取指定的行数,head是正序,tail是倒序。
    4. print(df.head(1))
    5. print(df.tail(1))
    6. #获取单个值,这个函数在什么场景会被频繁使用呢?最好不要是需要大量循环遍历的,那样就用的麻烦了。
    7. print(df.at[0,'date'])
    8. print(df.iat[0,1])
    9. #获取一列,不知道为什么不能使用columns来获取一列,只能指定index来获取,这里需要注意,使用set_index后的column也不能使用。
    10. #除了获取列外,这个函数还能处理只有布尔值的列,返回为True的列。
    11. #这里返回的是一个布尔数组
    12. print( (df['close'] - df['open']) / df['open'] > 0.03 )
    13. print(df.loc[ ( df['close'] - df['open']) / df['open'] > 0.03 ]['date'])
    14. #items()返回俩个元素来迭代dataframe中的columns,及其元素。将之拆分成单个的Series.
    15. #可以单个columns的获取,当想单个处理columns是会比较方便,当然与直接使用df[]相比较的话,也需要看使用场景了
    16. for i,n in df.items():
    17. print(f'i:{i}')
    18. print(f'n:{n}',sep='\n')
    19. for i,n in df.items():
    20. if i == 'date':
    21. print(f'i: {i}')
    22. print(f'n:{n}')
    23. #iterrows,itertuples都是将row迭代出来,只是格式有些不一样。
    24. print(next(df.iterrows())[1])
    25. for i in df.iterrows():
    26. print(i)
    27. for i in df.itertuples():
    28. print(i)
    29. #获取dataframe的columns在一个列表中,可以用迭代的方式来获取列名。
    30. print(df.keys())
    31. columns = df.keys()
    32. for i in columns:
    33. print(i)

    思考一个问题,对于数据类型的有效转换,比如时间。

    1. import pandas as pd
    2. df = pd.read_csv('D:\maotai.csv')
    3. #这里有两种方式可以转换时间类型,不过需要将转换后的值再次赋值给'date',否则无法真正转换类型
    4. df['date'] = df['date'].astype('datetime64')
    5. print(df.info())
    6. df['date'] = pd.to_datetime(df['date'])
    7. print(df.info())
    1. import pandas as pd
    2. import tushare as ts
    3. import matplotlib.pyplot as plt
    4. '''
    5. 绘制若干日的曲线图
    6. data = ts.get_k_data('000001',start ='1900-01-01')
    7. print(data)
    8. data.to_csv('D:\pingan.csv')
    9. '''
    10. df = pd.read_csv('D:\pingan.csv')
    11. print(df.head(10))
    12. df.drop(labels = 'Unnamed: 0', axis=1,inplace=True)
    13. print(df.head(10))
    14. print(df.info())
    15. df['date'] = pd.to_datetime(df['date'])
    16. df.set_index('date',inplace=True)
    17. print('------------------------')
    18. #?
    19. df['close'].rolling(5)
    20. ma5 = df['close'].rolling(5).mean()
    21. ma30 = df['close'].rolling(30).mean()
    22. print(ma5)
    23. #金叉,死叉?
    24. plt.plot(ma5[50:300],label='ma5',c='red')
    25. plt.plot(ma30[50:300],label='ma30',c='blue')
    26. #去除nan值
    27. ma5 = ma5[30:]
    28. ma30 = ma30[30:]
    29. s1 = ma5 < ma30
    30. s2 = ma5 >= ma30
    31. s1 & s2.shift(1)
    32. df.loc[s1&s2.shift(1)]
    33. plt.show()