python - DataFrame中apply函数的输出
问题描述
考虑以下数据框:
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
我在每一行上使用 apply 调用上述函数:
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?
感谢您的贡献:)
解决方案
您的情况下的 apply 函数将返回熊猫系列,而不是字典。检查与type(d)
。要将 d 的值连接到一个字典中,请使用以下代码:
da = {}
for r in d:
da.update(r)
推荐阅读
- linux - 为什么 Ubuntu 安装带有破坏 autoconf 的版本后缀的 ARM64 编译器?
- prolog - Problog 中的互斥性
- node.js - RangeError:超出最大调用堆栈大小。谁能帮我?
- vba - 使用 Document.Paragraphs.Add() 创建多个 Word 段落
- asp.net - 从 3.5 升级到 4.0,asp 菜单悬停在不工作
- excel - 使用 Openpyxl 将数据框附加到现有 Excel 工作表
- airflow - 创建 dag 运行时将参数传递给 Airflow Experimental REST api
- python - 如何整合所有区间?
- c# - WCF 服务仅返回基类
- amazon-web-services - AWS Route53 按过期搜索/排序域