私はPandas初心者です。行の最後の列に辞書を追加するコードを書いています。 は、最後の列は、私は私のコードを実行すると、私はエラーメッセージPandas列に一連の文字列を追加します。
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('S75') dtype('S75') dtype('S75')
を得るパンダエンジンを傷つける私のコードの「ホルダー」
一部は、
df.loc[df[innercat] == -1, 'Holder'] += str(odata)
の下に表示されて命名され"+ ="を "="に置き換えるとコードはうまく動作しますが、私は必要なデータの一部しか取得しません。 私は何が間違っていますか? str()キャストを削除しようとしましたが、それは割り当てとしてではなく、追加として機能します。
さらに明確化:
Math1 Math1_Notes Physics1 Physics1_Notes Chem1 Chem1_Notes Bio1 Bio1_Notes French1 French1_Notes Spanish1 Spanish1_Notes Holder
-1 Gr8 student 0 0 0 0 -1 Foo NaN
0 0 0 0 0 -1 Good student NaN
0 0 -1 So so 0 0 0 NaN
0 -1 Not serious -1 Hooray -1 Voila 0 NaN
私の元のデータセットは、データの300以上の列が含まれていますが、私は何をしようとしているの精神をキャプチャする例を作成しました。 1つ(またはそれ以上)のコースを提供する300の学科を持つ大学を想像してみてください。上記のデータはそのデータのミクロサンプルです。したがって、各生徒の名前または入場番号の隣に、あるコースを受講したことを示す「-1」があります。さらに、次の列USUALLYには、その学科のその学生に関するメモが含まれています。
上記のデータの1行目を見ると、学生には&という数式のスペイン語を習った学生がいて、各部門から学生に関するコメントが追加されました。各行について、各学生のデータを要約する辞書を追加したいと思います。基本的に、各部門エントリのJSON要約。私は私のcsvファイルを読むために私のコードを意図する一般的な形式
json_string = {"student name": a, "data": {"notes": b, "Course name": c}}
の文字列を想定し、各部門の辞書を形成し、ホルダー欄に追加します。したがって、上記の学生(1行目)のために、私は正常にデータを追加することができる場合
{"student name": "Peter", "data": {"notes": "Gr8 student", "Course name": "Math1"}} {"student name": "Peter", "data": {"notes": "Foo", "Course name": "Spanish1"}}
あろう2枚のすなわちdicts
{"student name": "Peter", "data": {"notes": "Gr8 student", "Course name": "Math1"}}
{"student name": "Peter", "data": {"notes": "Foo", "Course name": "Spanish1"}}
を、行1のホルダーの最終的な内容が存在することになりますたぶんカンマか '|'別の言葉の間に私が書いたコードの行は、)私はSTR(上記のようにラインをキャストするかどうかを
df.loc[df[innercat] == -1, 'Holder'] = str(odata)
で、代わりに追記演算子の割り当てを書くことは、すべての以前の値を上書きし、最後の値だけを書くように見えます私は私がやっていることの再生に興味がある人のために
-1 Gr8 student 0 0 0 0 -1 Foo {"student name": "Peter", "data": {"notes": "Gr8 student", "Course name": "Math1"}} {"student name": "Peter", "data": {"notes": "Foo", "Course name": "Spanish1"}}
を望んながらホルダーに、
-1 Gr8 student 0 0 0 0 -1 Foo {"student name": "Peter", "data": {"notes": "Foo", "Course name": "Spanish1"}}
のようなもの、私のコードの主要な部分を以下に示します
count = 0
substrategy = 0
for cat in col_array:
count += 1
for innercat in cat:
if "Notes" in innercat:
#b = str(df[innercat])
continue
substrategy += 1
c = count
a = substrategy
odata = {}
odata['did'] = a
odata['id'] = a
odata['data'] = {}
odata['data']['notes'] = b
odata['data']['substrategy'] = a
odata['data']['strategy'] = c
df.loc[df[innercat] == -1, 'Holder'] += str(odata)
あなたはそれが[問題を例示している]こと[サンプルデータ](http://stackoverflow.com/q/20109391/2087463)を作成することができます(http://stackoverflow.com/help/mcve)?特定の問題が何であるかを知ることは難しいでしょう。 – tmthydvnprt
'odata'のdtypeは何ですか?それは文字列シリーズでなければなりません... – MaxU
@MaxU:odataはdictです – user1801060