Python: 数据框和列表组成的IF语句
Python: IF statement consisting of data frame and list
我是 python 的新手,需要帮助。
我有一个从数据框中获得的关键字列表,如下所示:
key_a_list = df_key_words['words'].tolist()
我有第二个数据框,其中包含语句:df_response['statement']
我已经更正了 df_response['statement']
列中的拼写错误、标记化和词干化文本。
我需要检查 key_a_list
中是否有任何单词与 df_response['statement']
中的单词相匹配;然后我必须设置一个计数器来计算 key_a_list
中的单词出现在 df_response['statement']
中的次数。
感谢您的宝贵时间和帮助,非常感谢:)
这是我当前的代码,但它给我一个错误:ValueError:长度必须匹配才能比较
count_a = 0
def count(x):
for x in key_a_list:
if key_a_list == df_response['statement']:
count_a = count_a + 1
return count_a
df_response['statement'] = df_response['statement'].apply(lambda x: " ".join([count(x) for word in x.split()]))
key_a_list 由以下单词组成:['think'、'college'、'education'、'help'、'better'、'prepare'、'career'、'chosen'、'eventually'、'enable'、'enter'、'job'、'market'、'field' , 'like', 'make', 'choice', 'social', 'orientation', 'believe', 'additional', 'year', 'improve', 'competence', 'worker', 'prove', 'capable', 'completing', 'degree', 'rich', 'succeed', 'feel', 'important', 'show', 'intelligent', 'person', 'order', 'salary', 'later' , 'on', 'want', 'the', 'good', 'life', 'study', 'highschool', 'actuary', 'find'、'highpaying'、'obtain'、'prestigious']
df_response['statement'] 看起来如下:
statement
0 parent said
1 want make difference
2 dont know
3 rich
4 go career want
5 actuary
6 social life
7 expected society
df_response 的期望输出是:
statement count_a
0 parent said 0
1 want make difference 2
2 dont know 0
3 rich 1
4 go career want 2
5 actuary 1
6 social life 2
7 expected society 0
我认为您想将 if 语句中的 key_a_list 更改为 "x",因为 x 包含循环正在迭代的 key_a_list 中的每个单词。接下来,您可以使用关键字 "in" 来检查 x 是否在 df_response["statement"] 中,如果是则向上计数。
此外,您可以在函数内部定义 count_a,这样它就不是全局变量,以避免每次您 运行 函数 count(x) 而不是添加到现有计数器时都重置它。
我觉得应该是这样的,有不对的请有经验的大佬指正:
def count(x):
count_a = 0
for x in key_a_list:
if x in df_response['statement']:
count_a = count_a + 1
return count_a
没有理由在这里定义您自己的函数或使用 apply()
。值得庆幸的是,pandas 系列有一个方便的内置函数:series.str.count()。熟悉 pandas series.str...
方法可以为您节省大量工作!只需使用管道字符 (|
) 到 join
您的列表,使其成为正则表达式模式,然后 count
it
df['statement'].str.count('|'.join(key_a_list))
0 0
1 2
2 1
3 1
4 2
5 1
6 2
7 0
df['count_a']=df['statement'].str.count('|'.join(key_a_list))
df
statement count_a
0 parent said 0
1 want make difference 2
2 dont know 1
3 rich 1
4 go career want 2
5 actuary 1
6 social life 2
7 expected society 0
我是 python 的新手,需要帮助。
我有一个从数据框中获得的关键字列表,如下所示:
key_a_list = df_key_words['words'].tolist()
我有第二个数据框,其中包含语句:df_response['statement']
我已经更正了 df_response['statement']
列中的拼写错误、标记化和词干化文本。
我需要检查 key_a_list
中是否有任何单词与 df_response['statement']
中的单词相匹配;然后我必须设置一个计数器来计算 key_a_list
中的单词出现在 df_response['statement']
中的次数。
感谢您的宝贵时间和帮助,非常感谢:)
这是我当前的代码,但它给我一个错误:ValueError:长度必须匹配才能比较
count_a = 0
def count(x):
for x in key_a_list:
if key_a_list == df_response['statement']:
count_a = count_a + 1
return count_a
df_response['statement'] = df_response['statement'].apply(lambda x: " ".join([count(x) for word in x.split()]))
key_a_list 由以下单词组成:['think'、'college'、'education'、'help'、'better'、'prepare'、'career'、'chosen'、'eventually'、'enable'、'enter'、'job'、'market'、'field' , 'like', 'make', 'choice', 'social', 'orientation', 'believe', 'additional', 'year', 'improve', 'competence', 'worker', 'prove', 'capable', 'completing', 'degree', 'rich', 'succeed', 'feel', 'important', 'show', 'intelligent', 'person', 'order', 'salary', 'later' , 'on', 'want', 'the', 'good', 'life', 'study', 'highschool', 'actuary', 'find'、'highpaying'、'obtain'、'prestigious']
df_response['statement'] 看起来如下:
statement
0 parent said
1 want make difference
2 dont know
3 rich
4 go career want
5 actuary
6 social life
7 expected society
df_response 的期望输出是:
statement count_a
0 parent said 0
1 want make difference 2
2 dont know 0
3 rich 1
4 go career want 2
5 actuary 1
6 social life 2
7 expected society 0
我认为您想将 if 语句中的 key_a_list 更改为 "x",因为 x 包含循环正在迭代的 key_a_list 中的每个单词。接下来,您可以使用关键字 "in" 来检查 x 是否在 df_response["statement"] 中,如果是则向上计数。
此外,您可以在函数内部定义 count_a,这样它就不是全局变量,以避免每次您 运行 函数 count(x) 而不是添加到现有计数器时都重置它。
我觉得应该是这样的,有不对的请有经验的大佬指正:
def count(x):
count_a = 0
for x in key_a_list:
if x in df_response['statement']:
count_a = count_a + 1
return count_a
没有理由在这里定义您自己的函数或使用 apply()
。值得庆幸的是,pandas 系列有一个方便的内置函数:series.str.count()。熟悉 pandas series.str...
方法可以为您节省大量工作!只需使用管道字符 (|
) 到 join
您的列表,使其成为正则表达式模式,然后 count
it
df['statement'].str.count('|'.join(key_a_list))
0 0
1 2
2 1
3 1
4 2
5 1
6 2
7 0
df['count_a']=df['statement'].str.count('|'.join(key_a_list))
df
statement count_a
0 parent said 0
1 want make difference 2
2 dont know 1
3 rich 1
4 go career want 2
5 actuary 1
6 social life 2
7 expected society 0