【发布时间】:2020-10-12 03:56:41
【问题描述】:
我想使用 python pandas 复制类似于下面的 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 单独作为一行。但是,当我尝试在 pandas 中复制它时:
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”和“souls”作为单独的行。此外,由于 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)
【问题讨论】:
-
请发布一个带有您预期输出的 pandas 数据框。
-
谢谢提醒,贴出来!
标签: python r regex pandas tidytext