저는 팬더 초보자이며 행의 마지막 열에 사전을 추가해야하는 코드를 작성했습니다. 마지막 열은 "홀더"팬더 엔진은 내가팬더 열에 일련의 문자열을 추가합니다.
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"이 있습니다. 그리고 다음 칼럼에는 그 학생에 관한 해당 부서의 메모가 포함되어 있습니다.
위 데이터의 첫 번째 행을 보면 수학이 & 인 학생이 있으며 각학과에서 학생에 대한 의견을 추가했습니다. 각 행에 대해 각 학생의 데이터를 요약 한 사전을 추가하고 싶습니다. 기본적으로 각 부서 항목에 대한 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 홀더의 최종 내용이있을 것 아마 쉼표 또는 '|' 분리 된 딕트 사이에. 내가 작성한 코드 줄 내가 APPEND 운영자가 모든 이전 값을 덮어 쓰기 마지막 값을 쓰고 나타나는 대신 할당을 기록, 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