2016-10-14 8 views
0

私は株式市場データを分析しており、オープン、ハイ、ロー、クローズ、およびボリュームのみを取得できました。今、私はPandasを使って毎日の増加率を計算したかったのです。以下は、私のデータフレームです:Python Pandas - 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 

は、その後、私は近く前の日に必要なので、私は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 

が、すべて私のデータは、私が''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) 

を今私の主な問題は、私は、WAN、開始しますテッドは、以下の演算行うには:

% increase = (New Number - Original Number) ÷ Original Number × 100. 

を我々はfloatデータ型を持っている必要がある算術演算を行うために、私は次のようにデータ型を変換し、利益を計算し、あるコードを書いた:

>>> 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 

私のコードは正しく動作していますが、これよりも良い方法はありますか?私は型変換を正しく行っているのですか?単一の操作に複数の算術演算を使用する正しい方法ですか? 助けてくれてありがとう。

答えて

4

あなたが使用することができ、当日と前日の間のパーセント変化を計算するためのpct_change()関数は、(ここでNAは、私はあなたのデータの唯一の5行へのアクセスを持っているという事実によるものであることに注意)があります。

df['per'] = (df.close.replace({',':''}, regex=True).astype(float) 
       .pct_change().shift(-1) * 100) 

enter image description here

+0

どうもありがとうございました。それは私のコード行を減らしました... – Jeril

+0

'open'で変更を計算したいのですが、どうすればいいですか?前回のクローズからどのくらい高いオープン。あなたは助けてもらえますか? – Jeril

+1

私は次のようなことを考えています: 'df [['open'、 'high'、 'low'、 'close'、 'volume']] = df [['open'、 'high'、 'low' 'close'、 'volume']]。replace({'、': ''}、regex = True).astype(float); (df.open.shift(-1)-df.close)/ df.close'最初にデータをクリーンアップし、コードを最小にするように差分を計算します。 – Psidom