Python Pandas read_Excelの使い方
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 952
Python初心者です。
先物の自動売買ツールの作成に挑戦しています。
Python Pandas read Excelの書き方をご教示ください。
内容としては、先物の価格データが入力されているエクセルファイルの(i,3) i=2 から列の最後尾までのデータを取得したいです。
ファイル形式はExcelが好ましいです。
Pandasを使用としているのですが,下記のエラーが出て、良くわかりません。
実際に動くソースをご教示いただけますと凄く嬉しいです。
宜しくお願い致します。
inputprice = int(pd.read_excel(xlsFile, sheetname = sheetName, parse_cols=3, skiprows = i, skip_footer=20000))
/anaconda3/lib/python3.6/site-packages/pandas/util/_decorators.py:118: FutureWarning: The sheetname
keyword is deprecated, use sheet_name
instead
return func(*args, **kwargs)
Traceback (most recent call last):
File "gajumaru2.py", line 404, in <module>
main()
File "gajumaru2.py", line 341, in main
inputprice = int(pd.read_excel(xlsFile, sheetname = sheetName, parse_cols=3, skiprows = i, skip_footer=20000))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'DataFrame'
xlsFile = 'N225minif_2017.xlsx'
sheetName = '10min'
i = 2
for i in range(i, 20000):
lastprice = curprice
inputprice = int(pd.read_excel(xlsFile, sheetname = sheetName, parse_cols=3, skiprows = i, skip_footer=20000))
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
read_excelで読み込むとDataFrameというデータ形式のオブジェクトが生成されます。
エラーメッセージは、int関数の引数にこのオブジェクトを入力しているため発生しています。とりあえず、このintを外してデータを読み込めばエラーになりません。ただ、やりたいことからすると以下で問題ないはずです。
xlsFile = 'N225minif_2017.xlsx'
sheetName = '10min'
i = 2
inputprice = pd.read_excel(xlsFile, sheet_name = sheetName, use_cols=3, skiprows = i)
これでexcelfileの3行目以降の全てのデータを読み込むことができます。
use_colsは読み込む列名を指定するものです。今の指定方法だと0列目から3列目を読み込みます。仮に3列目だけを読み込みたいのであれば、
use_cols=[3]
とすると実現できます。
read_excelで読み込むとデータは、python側が最適な属性を選択してくれます。ファイルには価格データが入っているということなので、全て数字だと思うのでint関数を用いなくても勝手にintまたはfloatに変換してくれます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
2018/04/29 08:40
下記の通り、ソースを修正しました。しかし、下記のソースでは、2行目以降を全て取得する事になっており、ループのさせ方が誤っているのかと考えています。2行目以降を読み込み、3行目以降を読み込み。。。。となるイメージです。
一行ずつ値を取得するためには、先にDataFrameを作成し、その後、一行ずつ取得するべきなのか、1行ずつ取得しながらDataFrameも同時に作成していく?のかどちらが処理効率が高いのでしょうか。
また、上記を実現するためには、どのような実装が必要でしょうか。
どうぞご教示ください。
宜しくお願い致します。
xlsFile = 'N225minif_2017.xlsx'
sheetName = '10min'
i = 2
for i in range(i, 20000):
lastprice = curprice
inputprice = pd.read_excel(xlsFile, sheet_name = sheetName, use_cols=[3], skiprows = i)
2018/04/29 08:43
2018/04/29 08:46
補足) データは約3万件ほどあります。将来的には、10minおきにスクレイピングで値を取得し、処理を行いますが、ロジックのテストのため、過去データのエクセルファイルから1年分の10minおきの価格を取得しています。
2018/04/29 09:41
想定されてるデータ件数をfor文による繰り返し読み込み処理するのではread_excelを使う意味がありません。データの確認も一括処理することを考えたほうがいいかと思います。DataFrameは、Excelの表のようなもので、処理対象の列を指定してある値との比較や関数を使った計算結果の取得ができます。ある列の値を条件にした行の絞り込みも可能です。
「pandas DataFrame 使い方」をキーワードで検索して使い方を調べつつ、コード化することをお勧めします。
2018/05/04 14:22
ご教示いただき、有難うございました。