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

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

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

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

3621閲覧

pandasで取得した全Excelデータを配列に格納したい

FKM

総合スコア3624

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/10/28 08:16

編集2019/10/28 08:17

Python3でpandasを使ってExcelデータを取得し、それを最終的にflaskを使ってhtmlのテーブルリストに表示しようとしています。

発生した問題

pandasでExcelデータを取得しようとした、までは全然難しくなかったのですが、取り込んだデータに対し、配列に入れようとしても先頭行の値しか取得できません。

py

1# coding: UTF-8 2 3#Flaskを呼び出す(html表示用のマイクロフレームワーク) 4from flask import Flask, render_template 5import pandas as pd 6app = Flask(__name__) 7 8#Excelファイルの取り込み 9filename = "C:\Python\test.xlsx" 10xlsdata = pd.read_excel(filename, sheet_name=0, encoding='utf8',userows=[0,1,2]) 11print(xlsdata) 12data = xlsdata 13for (row) in data: 14 print(row) 15 16#…後略… 17

ここでデバッグした結果が、以下のコンソールで、下のExcel表と比較してもヘッダしか読み込んでくれていません。
イメージ説明

読み込もうとしているテスト用Excel(test.xlsx)は以下のデータを持っています。

イメージ説明

しかも、forで分割する前は全部のデータは持っているようです。
イメージ説明

#やってみたこと
###forの二重ループ
print(len(xlsdata))とすると2と出たので、2つのインデックスを持っていると思い、for文を入れ子構造にして出力してみました。

結果、ヘッダ部分の文字が1文字ずつに分割されただけでした。

###splitで分割してみた
改行コードで途切れてしまったのかと思い、xlsdata.split('\n')としてみました。

結果、エラーが表示されただけでした。

###明示的にインデックスを入れてみた
print(xlsdata[1])とか
print(xlsdata[1][1])とか明示的にインデックスを入れてみました。

結果、エラーが表示されただけでした。

また、いろんなページを巡回してみたのですが、どうも取得のことしか触れておらず、そこからどのように代入していくのかが全く書かれていません。

引き続き調査中ではありますが、解決法を教えて下さい。なお、flaskを使ったhtmlへの出力方法はわかっているので、今回は質問キーワードにFlaskは入れていません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

DataFrame を for ループすると、DataFrame.__iter__() が呼ばれるわけですが、これは DataFrame の列名を返します。
for で行の内容を1行ずつ取得したい場合は pandas.DataFrame.itertuples を使うとよいでしょう。

python

1for row in data.itertuples(): 2 print(row)

他にも指定した行を取得したり、用途に応じていろいろと関数が用意されています。
リファレンスの Indexing, iteration の欄に関数が載っています。

投稿2019/10/28 08:21

編集2019/10/28 08:23
tiitoi

総合スコア21956

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

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

FKM

2019/10/28 08:27

ありがとうございます。forループは列名を返すだけだったんですね。 itertuplesは全く知りませんでしたが、想定通りの動きを返すことができました。 itertuples()について改めて確認してきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問