2017-05-04 14 views
0

ここはPythonコードです。実行中にエラーが発生しています。TypeError:文字列インデックスは整数でなくてはならず、Pythonではstrではありません

def split_cell(s): 
    a = s.split(".") 
    b = a[1].split("::=") 
    return (a[0].lower(),b[0].lower(),b[1].lower()) 

logic_tbl,logic_col,logic_value = split_cell(rules['logic_1'][ith_rule]) 
mems = logic_tbl[logic_tbl[logic_col]==logic_value]['mbr_id'].tolist() 

split_cell関数は正常に機能しており、logic_tblのすべての列はオブジェクトデータ型です。ここ

トレースバック enter image description here

+5

完全なエラートレースバックが含まれています。 –

+3

あなたはこれを尋ねたときに提案された同じタイトルのすべての質問から解決策を得られませんでしたか? –

+2

'logic_tbl [0]'と 'logic_tbl [1]'のタイプは何ですか?あなたはその関数呼び出しの後に 'logic_tbl'を印刷できますか? – kuro

答えて

0

これが修正されました!

Logic_tblがパンダのデータフレームの名前を含む

Logic_colがパンダのデータフレーム内の列名の名前が含まれ

logic_valueはlogic_tblデータフレームにおけるlogic_col変数の行の値を含みます。

mems = logic_tbl[logic_tbl[logic_col]==logic_value]['mbr_id'].tolist() 

私は上記のようにしようとしていましたが、pythonはlogic_tblを文字列として扱い、パンダのデータフレームレベルの操作を行いませんでした。

So, I had created a dictionary like this 
dt_dict={} 
dt_dict['a_med_clm_diag'] = a_med_clm_diag 

そして、以下のように

mems = dt_dict[logic_tbl][dt_dict[logic_tbl][logic_col]==logic_value]['mbr_id'].tolist() 

を自分のコードを修正これは期待通りに働いています。私のような、「『logic_tbl』はフィルタする文字列は何もありません」

mems = logic_tbl[logic_tbl[logic_col]==logic_value,'mbr_id'] 

そしてこのthrowedメッセージのように書いたとき、私はこの考えに来ます。

-1

はコード以下のようにその最後の文を書いてみている:

filt = numpy.array[a==logic_value for a in logic_col] 
mems = [i for indx,i in enumerate(logic_col) if filt[indx] == True] 

は、この仕事をしていますか?

+0

私は試しましたが、うまくいきませんでした!同じエラーを表示しています! – subro

+0

ちょっと編集しました。試してみてください。 – Aman

+0

それでも問題が解決しない場合は、こちらも試してみてください: filt = numpy.array [a == logic_value in a logic_col]; MEMS = [I INDXため、I列挙(logic_col)でFILTなら[INDX] == TRUE] – Aman

関連する問題