我正在分析一个股市数据,但我只能得到开盘价,最高价,最低价,收盘价和成交量。现在,我想计算使用熊猫每天增加的百分比。以下是我的数据框:
>>> df.head()
date open high low close volume
0.0 Aug 18, 2016 1,250.00 1,294.85 1,250.00 1,293.25 1,312,905
1.0 Aug 17, 2016 1,240.00 1,275.00 1,235.05 1,243.85 1,704,985
2.0 Aug 16, 2016 1,297.00 1,297.95 1,206.65 1,237.10 3,054,180
3.0 Aug 12, 2016 1,406.25 1,406.25 1,176.75 1,276.40 8,882,899
4.0 Aug 11, 2016 1,511.85 1,584.50 1,475.00 1,580.00 1,610,322
Run Code Online (Sandbox Code Playgroud)
然后,我需要关闭前几天,因此我使用了该shift方法,如下所示:
>>> df['pre_close'] = df['close'].shift(-1)
>>> df.head()
date open high low close volume \
0.0 Aug 18, 2016 1,250.00 1,294.85 1,250.00 1,293.25 1,312,905
1.0 Aug 17, 2016 1,240.00 1,275.00 1,235.05 1,243.85 1,704,985
2.0 Aug 16, 2016 1,297.00 1,297.95 1,206.65 1,237.10 3,054,180
3.0 Aug 12, 2016 1,406.25 1,406.25 1,176.75 1,276.40 8,882,899
4.0 Aug 11, 2016 1,511.85 1,584.50 1,475.00 1,580.00 1,610,322
pre_close
0.0 1,243.85
1.0 1,237.10
2.0 1,276.40
3.0 1,580.00
4.0 1,510.05
Run Code Online (Sandbox Code Playgroud)
现在我想计算每天增加的百分比,但是我所有的数据都是字符串形式的,所以我commas用''和替换了如下:
>>> df.dtypes
date object
open object
high object
low object
close object
volume object
tomm_close object
dtype: object
>>> df = df.replace({',': ''}, regex=True)
Run Code Online (Sandbox Code Playgroud)
现在我的主要问题开始了,我想执行以下算术运算:
% increase = (New Number - Original Number) ÷ Original Number × 100.
Run Code Online (Sandbox Code Playgroud)
为了进行算术运算,我们需要具有浮点数据类型,并且我编写了一个代码来转换数据类型并计算利润,如下所示:
>>> df['per']=((df['close'].astype(float) \
.sub(df['pre_close'].astype(float), axis=0)) \
.div(df['close'].astype(float),axis=0)) \
.mul(float(100))
>>> df.head()
date open high low close volume pre_close \
0.0 Aug 18 2016 1250.00 1294.85 1250.00 1293.25 1312905 1243.85
1.0 Aug 17 2016 1240.00 1275.00 1235.05 1243.85 1704985 1237.10
2.0 Aug 16 2016 1297.00 1297.95 1206.65 1237.10 3054180 1276.40
3.0 Aug 12 2016 1406.25 1406.25 1176.75 1276.40 8882899 1580.00
4.0 Aug 11 2016 1511.85 1584.50 1475.00 1580.00 1610322 1510.05
per
0.0 3.819834
1.0 0.542670
2.0 -3.176784
3.0 -23.785647
4.0 4.427215
Run Code Online (Sandbox Code Playgroud)
我的代码可以正常工作,但是我怀疑还有没有比这更好的方法了?我可以正确进行类型转换吗?这是对单个操作使用多个算术运算的正确方法吗?谢谢您的帮助。
pct_change()您可以使用一个函数来计算当前日期和前一天之间的百分比变化(请注意,NA这是由于我只能访问您的五行数据):
df['per'] = (df.close.replace({',':''}, regex=True).astype(float)
.pct_change().shift(-1) * 100)
Run Code Online (Sandbox Code Playgroud)