使用 pandas 数据框应用函数 - POS 标记器计算时间
Apply function with pandas dataframe - POS tagger computation time
我对 pandas 的应用函数很困惑。我有一个大数据框,其中一列是一列字符串。然后我使用一个函数来计算词性出现的次数。我只是不确定设置应用语句或函数的方式。
def noun_count(row):
x = tagger(df['string'][row].split())
# array flattening and filtering out all but nouns, then summing them
return num
所以基本上我有一个类似于上面的功能,我在输出单个数字(名词数量)的列上使用 POS 标记器。我可能会重写它以针对不同的词性输出多个数字,但我无法绕过 apply
.
我很确定我没有正确安排任何部分。例如,我可以 运行 noun_count[row]
并获得任何索引的正确值,但我无法弄清楚如何使它与 apply 我的设置方式一起工作。基本上我不知道如何将行值传递给应用语句中的函数。
df['num_nouns'] = df.apply(noun_count(??),1)
抱歉,这个问题到处都是。那么我该怎么做才能得到像
这样的简单结果
string num_nouns
0 'cat' 1
1 'two cats' 1
编辑:
所以我设法通过使用列表理解来使某些东西起作用(有人发布了一个答案,但他们已经删除了它)。
df['string'].apply(lambda row: noun_count(row),1)
需要调整我的功能:
def tagger_nouns(x):
list_of_lists = st.tag(x.split())
flat = [y for z in list_of_lists for y in z]
Parts_of_speech = [row[1] for row in flattened]
c = Counter(Parts_of_speech)
nouns = c['NN']+c['NNS']+c['NNP']+c['NNPS']
return nouns
我使用的是 Stanford 标注器,但我在计算时间上遇到了很大的问题,而且我使用的是左 3 词模型。我注意到它一次又一次地调用 .jar 文件(java 在任务管理器中不断打开和关闭),也许这是不可避免的,但 运行 确实花费了太多时间。有什么办法可以加快速度吗?
我不知道 'tagger' 是什么,但这是一个简单的示例,其中的字数统计应该或多或少以相同的方式工作:
f = lambda x: len(x.split())
df['num_words'] = df['string'].apply(f)
string num_words
0 'cat' 1
1 'two cats' 2
我对 pandas 的应用函数很困惑。我有一个大数据框,其中一列是一列字符串。然后我使用一个函数来计算词性出现的次数。我只是不确定设置应用语句或函数的方式。
def noun_count(row):
x = tagger(df['string'][row].split())
# array flattening and filtering out all but nouns, then summing them
return num
所以基本上我有一个类似于上面的功能,我在输出单个数字(名词数量)的列上使用 POS 标记器。我可能会重写它以针对不同的词性输出多个数字,但我无法绕过 apply
.
我很确定我没有正确安排任何部分。例如,我可以 运行 noun_count[row]
并获得任何索引的正确值,但我无法弄清楚如何使它与 apply 我的设置方式一起工作。基本上我不知道如何将行值传递给应用语句中的函数。
df['num_nouns'] = df.apply(noun_count(??),1)
抱歉,这个问题到处都是。那么我该怎么做才能得到像
这样的简单结果 string num_nouns
0 'cat' 1
1 'two cats' 1
编辑: 所以我设法通过使用列表理解来使某些东西起作用(有人发布了一个答案,但他们已经删除了它)。
df['string'].apply(lambda row: noun_count(row),1)
需要调整我的功能:
def tagger_nouns(x):
list_of_lists = st.tag(x.split())
flat = [y for z in list_of_lists for y in z]
Parts_of_speech = [row[1] for row in flattened]
c = Counter(Parts_of_speech)
nouns = c['NN']+c['NNS']+c['NNP']+c['NNPS']
return nouns
我使用的是 Stanford 标注器,但我在计算时间上遇到了很大的问题,而且我使用的是左 3 词模型。我注意到它一次又一次地调用 .jar 文件(java 在任务管理器中不断打开和关闭),也许这是不可避免的,但 运行 确实花费了太多时间。有什么办法可以加快速度吗?
我不知道 'tagger' 是什么,但这是一个简单的示例,其中的字数统计应该或多或少以相同的方式工作:
f = lambda x: len(x.split())
df['num_words'] = df['string'].apply(f)
string num_words
0 'cat' 1
1 'two cats' 2