Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过使用值计数进行拆分来进行字符串比较_Python_Pandas - Fatal编程技术网

Python 通过使用值计数进行拆分来进行字符串比较

Python 通过使用值计数进行拆分来进行字符串比较,python,pandas,Python,Pandas,我不熟悉使用pandas,我正在尝试创建一种方法,在pandas中匹配具有低值_计数的字符串,然后将其更改为匹配具有较高值计数的类似字符串。我试着把弦分开,但我想不出下一部分。我要做的是检查数组中是否存在长度超过2个字符的拆分字符串,并使用较高的值计数进行匹配,以便该列的所有匹配字符串都相同。大约有18个不同的值计数,我的目标是使其达到最低值,应该是10或11。它来自一个更大的数据帧,有很多类似的组可以重复这一点。这就是我到目前为止所做的 vc = data['event_name'].valu

我不熟悉使用pandas,我正在尝试创建一种方法,在pandas中匹配具有低值_计数的字符串,然后将其更改为匹配具有较高值计数的类似字符串。我试着把弦分开,但我想不出下一部分。我要做的是检查数组中是否存在长度超过2个字符的拆分字符串,并使用较高的值计数进行匹配,以便该列的所有匹配字符串都相同。大约有18个不同的值计数,我的目标是使其达到最低值,应该是10或11。它来自一个更大的数据帧,有很多类似的组可以重复这一点。这就是我到目前为止所做的

vc = data['event_name'].value_counts()
   str_arr = []
   for v in vc[vc < 10].index:
       str_arr.append(v.split())
我不知道如何使用循环匹配和更新数据帧,也不知道如何确保要匹配的字符串中不包含低值计数字符串。

如果从

vc = data.merge(data['event_name'].value_counts().reset_index(),
                left_on='event_name', right_on='index', how='left')
获取与初始数据帧的每一行关联的值_计数,并将设置步骤替换为*

vc['long words'] = vc['event_name'].str.replace('\s\S\S?\s|\A\S\S?\s|\s\S\S?\z',
                                                ' ').str.strip()
要创建一个只包含较长单词的字段,则可以使用

vc_max = vc.sort_values('event_name_y', ascending=False).drop_duplicates('long words')
要识别每组匹配较长单词的最频繁值,请使用

vc.merge(vc_max, on='long words', how='left')
为了将它们与每一行相匹配,由于索引保持不变,因此可以使用

data['event_name'] = vc.merge(vc_max, on='long words', how='left')['event_name_x_y']

*如果你想坚持列表/不喜欢正则表达式,下面的方法也可以

    vc['long words'] = [' '.join([string for string in split if len(string) > 2])
                        for split in vc['event_name'].str.split().tolist()]

你能简单地解释一下你的问题吗?当然,我会试试..我怎样才能得到一个拆分字符串并在其他值中搜索至少2个匹配项。例如,拆分字符串[“AB”、“一个较长的字符串”、“CD”、“另一个字符串”]。要与“一个较长的字符串CD”匹配的字符串是另一个字符串“。我想检查两个较长的字符串是否匹配,如果匹配,请更改拆分的原始字符串的值。谢谢,这几乎对我有效。正则表达式的版本与列表的版本不匹配,但是一些较短的字符串并不总是在开头,这可能是原因。这份名单的版本几乎与所有人都相符。我在拆分行中遇到了一个关键错误,我通过更改为vc['event\u name\u x']而不是vc['event\u name']解决了这个问题。最后一行对我不起作用,数据['event_name']字段为NaN,可能是因为索引来自更大的数据帧。有一些例外,例如缩写和额外的单词。我添加了一行,现在已经解析了所有较短的字符串,并在从主数据帧提取后重置了索引,所以现在它可以工作了,谢谢EFT。
    vc['long words'] = [' '.join([string for string in split if len(string) > 2])
                        for split in vc['event_name'].str.split().tolist()]