CSV文件内容格式如下,使用相关插件(VSCode,Excel Viewer)进行了美化。可以注意到总共有7列。
import pandas as pd
data = pd.read_csv('./data/AAPL.csv',index_col=0, parse_dates = ['Date']) #将第一列设置为index
这里将第一列设置为index,实际上CSV文件中第一列是行号。然后将Date列自动转化为日期类型,,方便后续操作。
#查看data的数据类型
print(data.dtypes) #dtypes是DataFrame和Series的一个属性
#输出结果
Date datetime64[ns]
Open float64
High float64
Low float64
Close float64
Volume float64
dtype: object
#查看data的详细信息
print(data.info())
#输出结果
<class 'pandas.core.frame.DataFrame'> #data的数据类型
Int64Index: 5255 entries, 0 to 5254 #index的数据类型
Data columns (total 6 columns): #除了index总共6列,index,Date,HOCL,V
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Date 5255 non-null datetime64[ns] #日期类型
1 Open 5255 non-null float64
2 High 5255 non-null float64
3 Low 5255 non-null float64
4 Close 5255 non-null float64
5 Volume 5255 non-null float64
dtypes: datetime64[ns](1), float64(5)
memory usage: 287.4 KB #占用内存空间
None
#查看data的统计分析
print(data.describe())
#输出
Open High Low Close Volume
count 5255.000000 5255.000000 5255.000000 5255.000000 5.255000e+03
mean 158.335855 160.109968 156.388133 158.286548 2.122191e+07
std 161.309153 162.588024 159.766714 161.195754 1.824189e+07
min 12.990000 13.190000 12.720000 13.120000 7.025000e+05
25% 37.940000 38.580000 37.160000 37.980000 6.705350e+06
50% 106.370000 108.000000 104.880000 106.130000 1.677300e+07
75% 187.765000 189.405000 185.635000 187.560050 2.976013e+07
max 702.410000 705.070000 699.570000 702.100000 1.895606e+08
data = data.sort_values('Date') #排序
#然后设置日期列为index
data = data.set_index('Date')
data_of_2018 = data.loc['2018'] #data['2018']也可以,但是建议用loc操作符
#也可以提取某月的数据
data_of_month = data.loc['2018-01']
#提取某日的数据
data_of_day = data.loc['2018-01-02']
或者数据切片
#提取2018年2月到4月的数据
data_of_during = data.loc['2018-02':'2018-04']
print(data_of_during.head())
print(data_of_during.tail())
结果如下
Open High Low Close Volume
Date
2018-02-01 167.165 168.62 166.7600 167.78 38099665.0
2018-02-02 166.000 166.80 160.1000 160.50 85436075.0
2018-02-05 159.100 163.88 156.0000 156.49 66090446.0
2018-02-06 154.830 163.72 154.0000 163.03 66625484.0
2018-02-07 163.085 163.40 159.0685 159.54 50852130.0
Open High Low Close Volume
Date
2018-04-24 165.6700 166.33 161.2201 162.94 33692017.0
2018-04-25 162.6200 165.42 162.4100 163.65 28382084.0
2018-04-26 164.1200 165.73 163.3700 164.22 27963014.0
2018-04-27 164.0000 164.33 160.6300 162.32 35655839.0
2018-04-30 162.1302 167.26 161.8400 165.26 42427424.0
data_after_2018_10 = data.truncate(before='2018-10') #截断2018年10月之前的数据
print(data_after_2018_10.head())
Open High Low Close Volume
Date
2018-10-01 227.95 229.42 226.35 227.26 23600802.0
2018-10-02 227.25 230.00 226.63 229.28 24788170.0
2018-10-03 230.05 233.47 229.78 232.07 28654799.0
2018-10-04 230.78 232.35 226.73 227.99 32042000.0
2018-10-05 227.96 228.41 220.58 224.29 33580463.0
同理after='2018-10’表示截断2018年10月之后的数据,保留之前的数据
data_of_during_shift1 = data_of_during.shift(1)
print(data_of_during_shift1.head())
Date
2018-02-01 NaN NaN NaN NaN NaN
2018-02-02 167.165 168.62 166.76 167.78 38099665.0
2018-02-05 166.000 166.80 160.10 160.50 85436075.0
2018-02-06 159.100 163.88 156.00 156.49 66090446.0
2018-02-07 154.830 163.72 154.00 163.03 66625484.0
可以看到,index不动,数据整体往后移动了一行。如果shift(-1)则表示,舍弃第一行数据,数据整体往前移动一行。
该方法在金融领域的数据常用
import mplfinance as mpf
kwargs = dict(type='candle',mav=(2,4,6),volume=True)
mc = mpf.make_marketcolors(up='r',down='g') #自定义蜡烛图的颜色
my_style = mpf.make_mpf_style(marketcolors=mc) #仅仅指定marketcolors
mpf.plot(data_after_2018_10,**kwargs,style=my_style)
mplfinance的操作很简单,具体可以查看其github官网教程
文末,推广一下个人公众号【港资交易数据分析】,或者直接访问网站