Рассмотрим следующий кадр данных:
Data=[[0,'ABC SCHOOL BOARDING',['ABC','SCHOOL','BOARDING']],
[1,'UNIVERSITY BOARDING INSTITUTE',['UNIVERSITY','BOARDING','INSTITUTE']],
[2,'MARIE INSTITUTE SCHOOL',['MARIE', 'INSTITUTE','SCHOOL']],
[3,'RALPH ELEMENTARY SCHOOL',['RALPH','ELEMENTARY','SCHOOL']],
[4,'BOARDING SCHOOL',['BOARDING','SCHOOL']]]
df=pd.DataFrame(Data, columns=['id','name', 'name_list'])
Я использую функцию применения, которая возвращает словарь для каждой строки:
def classify(row, df_start, df_end):
#df = pd.DataFrame(columns=['word','classification'])
d={}
for word in row.name_list:
flag=False
if word in df_start.values:
#df=df.append(pd.DataFrame({'word':[word], 'classification':['start']}))
d[word]='start'
flag=True
if word in df_end.values:
#df=df.append(pd.DataFrame({'word':[word], 'classification':['end']}))
d[word]='end'
flag=True
if (not flag):
#df=df.append(pd.DataFrame({'word':[word], 'classification':['none']}))
d[word]='none'
return d
Я вызываю вышеуказанную функцию, применяя ее к каждой строке:
df_start=pd.DataFrame(columns=['name'])
df_end=pd.DataFrame(columns=['name'])
df_start= df.name.str.split().str.get(0).drop_duplicates(keep="last")
df_end= df.name.str.split().str.get(-1).drop_duplicates(keep="last")
d={}
d = df.apply(classify, args=[df_start, df_end],axis=1)
for k, v in d.items():
print(k)
Однако значения ключей в возвращенном словаре выводятся следующим образом:
0
1
2
3
4
В то время как значения для словаря следующие:
{'ABC': 'start', 'SCHOOL': 'end', 'BOARDING': 'end'}
{'UNIVERSITY': 'start', 'BOARDING': 'end', 'INSTITUTE': 'end'}
{'MARIE': 'start', 'INSTITUTE': 'end', 'SCHOOL': 'end'}
{'RALPH': 'start', 'ELEMENTARY': 'none', 'SCHOOL': 'end'}
{'BOARDING': 'end', 'SCHOOL': 'end'}
При печати в функции classify
ключ и значение соответствуют ожидаемым. Эти ключи:
ABC
SCHOOL
BOARDING
UNIVERSITY
BOARDING
INSTITUTE
MARIE
INSTITUTE
SCHOOL
RALPH
ELEMENTARY
SCHOOL
BOARDING
SCHOOL
И эти значения:
start
end
end
start
end
end
start
end
end
start
none
end
end
end
Почему числа добавляются при возврате из функции применения? Как я могу преобразовать ожидаемый словарь в DataFrame?
Спасибо за ваш вклад :)
Return Type: Pandas Series after applied function/operation.
я ожидал фрейм данных в качестве возврата. 13.12.2019