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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

1565閲覧

Python Pandas read_Excelの使い方

songyong

総合スコア21

Python 3.x

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

0グッド

0クリップ

投稿2018/04/28 17:15

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'

Python

1 xlsFile = 'N225minif_2017.xlsx' 2 sheetName = '10min' 3 4 i = 2 5 for i in range(i, 20000): 6 lastprice = curprice 7 8 inputprice = int(pd.read_excel(xlsFile, sheetname = sheetName, parse_cols=3, skiprows = i, skip_footer=20000))

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

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

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

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

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

guest

回答1

0

ベストアンサー

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/28 18:45

R.Shigemori

総合スコア3376

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

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

songyong

2018/04/28 23: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)
songyong

2018/04/28 23:43

一つずつ値を取得し、取得した値で、売買ロジックの確認を行う という動作をデータの最終列まで繰り返したいです。
songyong

2018/04/28 23:46

訂正) ✖️最終列 ○最終行 補足) データは約3万件ほどあります。将来的には、10minおきにスクレイピングで値を取得し、処理を行いますが、ロジックのテストのため、過去データのエクセルファイルから1年分の10minおきの価格を取得しています。
R.Shigemori

2018/04/29 00:41

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

2018/05/04 05:22

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問