🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

676閲覧

DataFrame に前日比を追加、前日比50%超の抽出ができない(query文)

kumatakun

総合スコア7

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/02/20 00:49

python初心者です。
株価のデータを読み込み出来高の前日比を計算し、その後に前日比50%超の日付を抽出したいと考えております。

クエリで前日比50%のものを抽出したいと考えておりますが、エラーが発生します
下記のコードのmydf3 = mydf1.query('diff(vo)> 1.5') の箇所が原因であるとは思うのですが
どのように改善すればよいかわからなく困っております

アドバイスいただけますと大変助かります

目的 エクセルで実施していることがpythonでできるかの確認 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn import linear_model from sklearn import metrics #CSVファイルの読み込み mydf1=pd.read_csv('book.csv',index_col=0,parse_dates=[0]) mydf1=mydf1.sort_index() #出来高前日比 mydf1['diff(vo)']=mydf1['volume']/mydf1.shift(+1)['volume'] mydf3 = mydf1.query('diff(vo)> 1.5') #これが定義できていない newdf3=pd.DataFrame(mydf3,columns=['low','volume','diff(vo)']) print(newdf3) コード
CSVのデータです date   low         volume 2019/1/4 1,290.00 512.1 2019/1/7 1,365.00 240.6 2019/1/8 1,396.70 305.7 2019/1/9 1,406.70 246.9 2019/1/10 1,381.70 247.5 2019/1/11 1,558.30 1030 2019/1/15 1,555.00 680.7 2019/1/16 1,548.30 287.7 2019/1/17 1,576.70 395.4 2019/1/18 1,630.00 381.3 2019/1/21 1,643.30 239.7 2019/1/22 1,625.00 218.4 2019/1/23 1,616.70 235.8 2019/1/24 1,610.00 189.9 2019/1/25 1,666.70 629.1 2019/1/28 1,590.00 525.6 2019/1/29 1,583.30 388.5 2019/1/30 1,531.70 598.2 2019/1/31 1,551.70 332.4 2019/2/1 1,576.70 216.9 2019/2/4 1,598.30 224.1 2019/2/5 1,583.30 245.4 2019/2/6 1,610.00 256.8 2019/2/7 1,585.00 192.3 2019/2/8 1,561.70 213 2019/2/12 1,586.70 225.9

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/02/20 01:05

> クエリで前日比50%のものを抽出したいと考えておりますが、エラーが発生します エラーを提示しましょう。
guest

回答1

0

ベストアンサー

python

1mydf1['diff(vo)']=mydf1['volume']/mydf1.shift(+1)['volume'] 2mydf3 = mydf1.query('diff(vo)> 1.5')

上記を下記にすれば実行できるかと思います。

python

1mydf1['diff_vo']=mydf1['volume']/mydf1.shift(+1)['volume'] 2mydf3 = mydf1.query('diff_vo > 1.5')

詳しくは分かりませんがquery()では使用できない文字があるようです。

投稿2021/02/20 01:13

meg_

総合スコア10736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumatakun

2021/02/20 07:27

大変ありがとうございます。上記の修正をしましたら実行できました。 query()では使用できない文字があることを知らずに勉強になりました。 ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問