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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

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

Python

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

Q&A

1回答

1515閲覧

TypeError: string indices must be integers

tomtomtom1007

総合スコア1

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/07/01 14:38

TypeError: string indices must be integersというエラーが出て困っています。コードは下記のとおりです

Python

1from flask import Flask, make_response, request 2import pandas as pd 3from sklearn.preprocessing import LabelEncoder 4app = Flask(__name__) 5 6 7@app.route('/') 8def form(): 9 return """ 10 <html> 11 <body> 12 <h1>Transform a file demo</h1> 13 14 <form action="/transform" method="post" enctype="multipart/form-data"> 15 <input type="file" name="data_file" /> 16 <input type="submit" /> 17 </form> 18 </body> 19 </html> 20 """ 21 22@app.route('/transform', methods=["POST"]) 23def transform_view(): 24 request_file = request.files['data_file'] 25 if not request_file: 26 return "No file" 27 test=request_file.read().decode("utf-8") 28 train_x=pd.read_csv("C:\Users\matsu/train_x.csv") 29 train_y=pd.read_csv("C:\Users\matsu/train_y.csv") 30 train_x_drop=train_x[["職場の様子","(派遣先)配属先部署 男女比 男","大手企業", 31 "交通費別途支給","残業月20時間以上", 32 "職種コード","1日7時間以下勤務OK","短時間勤務OK(1日4h以内)", 33 "駅から徒歩5分以内","勤務地 最寄駅1(分)","勤務地 最寄駅2(沿線名)", 34 "勤務地 最寄駅2(駅からの交通手段)","期間・時間 勤務期間","派遣形態", 35 "週2・3日OK","16時前退社OK","正社員登用あり","残業月20時間未満", 36 "勤務地 備考","英語力不要","休日休暇(日曜日)", 37 "社員食堂あり","10時以降出社OK","休日休暇(祝日)","服装自由","(派遣先)配属先部署","勤務地 最寄駅1(沿線名)", 38 "会社概要 業界コード","勤務地 都道府県コード","制服あり", 39 "給与/交通費 給与上限","仕事の仕方","勤務地 最寄駅1(駅からの交通手段)", 40 "シフト勤務","週4日勤務","未経験OK", 41 "土日祝休み","給与/交通費 交通費","給与/交通費 給与下限"]] 42 test_drop=test[["職場の様子","(派遣先)配属先部署 男女比 男","大手企業", 43 "交通費別途支給","残業月20時間以上", 44 "職種コード","1日7時間以下勤務OK","短時間勤務OK(1日4h以内)", 45 "駅から徒歩5分以内","勤務地 最寄駅1(分)","勤務地 最寄駅2(沿線名)", 46 "勤務地 最寄駅2(駅からの交通手段)","期間・時間 勤務期間","派遣形態", 47 "週2・3日OK","16時前退社OK","正社員登用あり","残業月20時間未満", 48 "勤務地 備考","英語力不要","休日休暇(日曜日)", 49 "社員食堂あり","10時以降出社OK","休日休暇(祝日)","服装自由","(派遣先)配属先部署","勤務地 最寄駅1(沿線名)", 50 "会社概要 業界コード","勤務地 都道府県コード","制服あり", 51 "給与/交通費 給与上限","仕事の仕方","勤務地 最寄駅1(駅からの交通手段)", 52 "シフト勤務","週4日勤務","未経験OK", 53 "土日祝休み","給与/交通費 交通費","給与/交通費 給与下限"]] 54 for i in range(train_x_drop.shape[1]): 55 if train_x_drop.iloc[:,i].dtypes==object or train_x_drop.iloc[:,i].dtypes==bool: 56 lbl=LabelEncoder() 57 lbl.fit(list(train_x_drop.iloc[:,i].values)+list(test_drop.iloc[:,i].values)) 58 train_x_drop.iloc[:,i]=lbl.transform(list(train_x_drop.iloc[:,i].values)) 59 test_drop.iloc[:,i]=lbl.transform(list(test_drop.iloc[:,i].values)) 60 train_x_drop_1=train_x_drop.fillna(-9999) 61 test_drop_1=test_drop.fillna(-9999) 62 X_train=train_x_drop_1 63 y_train=train_y.drop("お仕事No.",axis=1) 64 X_test=test_drop_1 65 y_train=y_train.astype(np.int) 66 from sklearn.ensemble import RandomForestClassifier as RFC 67 lr=RFC(n_estimators=100,random_state=0) 68 lr.fit(X_train,y_train) 69 y_pred_train=lr.predict(X_test) 70 print(lr.score(X_train,y_train)) 71 y_pred_train=y_pred_train.astype(np.float64) 72 test["応募数 合計"]=y_pred_train_all 73 test = test[["お仕事No.","応募数 合計"]] 74 ans=test.to_csv("sample_submit.csv", index=False, encoding='utf-8') 75 76 response = make_response(ans) 77 response.headers["Content-Disposition"] = "attachment; filename=result.csv" 78 return response

File "c:\dip\dip2.py", line 56, in transform_view
"土日祝休み","給与/交通費 交通費","給与/交通費 給与下限"]]
TypeError: string indices must be integers
作りたいWebアプリはcsvファイルを読み込んで予測結果のcsvファイルを返すものです

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

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

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

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

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

guest

回答1

0

エラーになっているのは次の部分でしたね。

python

1 test=request_file.read().decode("utf-8") 2 # ... (略) 3 test_drop=test[["職場の様子","(派遣先)配属先部署 男女比 男","大手企業", 4 # ... (略) 5 ]]

testはファイルを読んでdecodeしているので文字列(str)です。
文字列に対して test[['foo', 'bar']]というインデックスはできないですね。
おそらく、別のデータフレームの変数との間違いではないでしょうか。

【最初の回答】

これが原因かはわかりませんが、LabelEncoderのtransformをしている部分はifのブロックの中にあるべきではないでしょうか。
このままでは、本来LabelEncoderが不要のカラムに対しても無関係のtransformが実施されます。
(列の並び方次第では、変数lblが未定義でエラーになって気づけたかもしれません)

投稿2020/07/02 00:47

編集2020/07/02 05:04
bsdfan

総合スコア4794

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

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

tomtomtom1007

2020/07/02 04:52

ご指摘ありがとうございます。その部分は今直してみましたがやはりエラーが出てしまいました
tomtomtom1007

2020/07/02 05:15

色々いじった結果問題testの読み込み方にあるような気がしています
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問