我想使用python复制与下面df_long类似的结果。这是R代码:
df <- data.frame("id" = 1, "author" = 'trump', "Tweet" = "RT @kin2souls: @KimStrassel Anyone that votes")
unnest_regex <- "([^A-Za-z_\\d#@']|'(?![A-Za-z_\\d#@]))"
df_long <- df %>%
unnest_tokens(
word, Tweet, token = "regex", pattern = unnest_regex)
如果我理解正确的话,unnest_regex的编写方式也可以找到数字(在空白和少量标点符号中)。我不明白为什么R会将字符串中的数字,例如“@kin2souls”视为不匹配条件。因此,我们在df_long中得到了一个结果,@kin2souls单独作为一行。然而,当我试图在熊猫身上复制这一点时:
unnest_regex = r"([^A-Za-z_\\d#@']|'(?![A-Za-z_\\d#@]))"
df = df_long.assign(word=df['Tweet'].str.split(unnest_regex)).explode('word')
df.drop("Tweet", axis=1, inplace=True)
它将把“@kin2souls”字符串分成“@kin”和“灵魂”两行。此外,由于unnest_regex使用捕获括号,在Python中,我将其修改为:
unnest_regex = r"[^A-Za-z_\\d#@']|'(?![A-Za-z_\\d#@])"
这是为了避免结果为空字符串。我想知道这是否也是一个促成因素。然而,在“2”的分裂仍然发生。有人能用Python提出一个解决方案并解释为什么R会这样做吗?谢谢大家!
以下是Python中的数据:
data = {'id':[1], "author":["trump"], "Tweet": ["RT @kin2souls: @KimStrassel Anyone that votes"]}
df = pd.DataFrame.from_dict(data)
预期的结果是:
data_long = {'id':[1,1,1,1,1,1], "author":["trump","trump","trump","trump","trump","trump"], "word": ["rt", "@kin2souls", "@kimstrassel", "anyone", "that", "votes"]}
df_long = pd.DataFrame.from_dict(data_long)
str split和explode的组合应该复制您的输出:
我利用了文本由空格分隔的事实,以及偶尔出现的
:
或者,您可以使用str extractall-我觉得它要长一点:
不确定
unnest_token
如何与regex一起工作-也许其他人可以解决这个问题相关问题 更多 >
编程相关推荐