質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.47%

  • Python 3.x

    6911questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python Pandas read_Excelの使い方

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 559

songyong

score 7

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

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文の部分はファイルの読み込みには不要なので、ざっくりと全て削除したほうがいいでしょう。
    想定されてるデータ件数をfor文による繰り返し読み込み処理するのではread_excelを使う意味がありません。データの確認も一括処理することを考えたほうがいいかと思います。DataFrameは、Excelの表のようなもので、処理対象の列を指定してある値との比較や関数を使った計算結果の取得ができます。ある列の値を条件にした行の絞り込みも可能です。
    「pandas DataFrame 使い方」をキーワードで検索して使い方を調べつつ、コード化することをお勧めします。

    キャンセル

  • 2018/05/04 14:22

    回答ありがとうございます。DataFrameについて、調べ、実装を変更してみます。
    ご教示いただき、有難うございました。

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    6911questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。