【问题标题】:Matching Words from One Dataframe to Another将一个数据帧中的单词匹配到另一个数据帧
【发布时间】:2021-05-12 05:44:10
【问题描述】:

我有两个数据框 -

一个数据框有一列包含音乐艺术家列表(每行一位艺术家)。有 10K 行。该数据包含每位艺术家的人口统计数据(国家、年龄)。

Artist. Age Country
Drake 34 CA
Snoop Dogg 49 US

还有另一个数据框,其中包含一列艺术家及其歌曲。 - 32,000 行此数据

Artist. Song Name
[Snoop Dogg, Daz Dillinger] Song name 1
[Second] Song name 2

我无法将第一个数据帧中的艺术家匹配到第二个数据帧,因为在第二个数据帧中有 Snoop Dogg 和其他艺术家。我尝试使用 grepl 运行一些代码,根据艺术家的第一个数据框列创建了一个向量,以匹配第二个数据框中的 Artist 列,但它运行“内存不足”。我也取消了数据嵌套,但它给了我一个很大的错误,如下所示:

错误:必须使用有效的下标向量对列进行子集化。 x 下标的类型错误data.frame< X : integer index : integer artist : character gender : character age : integer type : character country : character city_1 : character district_1: character city_2 : character district_2: character city_3 : character district_3: character >。 ℹ 必须是数字或字符。运行 `rlang::last_error()

所需的输出如下:

Artist. Song Name Artist_Matched Age Country
[Snoop Dogg, Daz Dillinger] Song name 1 Snoop Dogg 49 US
[Second] Song name 2

我尝试过的一些代码 -

df3

grepl(paste(art_v, collapse = "|"), df3$art) 中的错误:正则表达式无效,原因是“内存不足”

非常感谢您的帮助!

我还没有为此尝试过 python。我所有的代码都在 R 中,但如果你有关于如何在 python 中执行此操作的建议,请务必打开它!

【问题讨论】:

  • 不要写== True,这是无意义的代码。

标签: python r dataframe match


【解决方案1】:

您可以使用 Pandas 将列与列表展开。然后合并数据框。

类似:

pd.merge( df1.explode('Artist'), df0, on='Artist')

【讨论】:

  • 感谢您的回答。不幸的是,它没有将 python 中的行识别为列表。结果,explode() 方法似乎不起作用。它告诉我一个数据类型是一个对象。你知道我怎样才能把它变成一个列表吗?
  • 我想我明白了!刚刚使用了 apply(literal_eval)。非常感谢!!
  • 那么您可能没有将内容转换为列表而是字符串。因此,最好在 stackoverflow 问题中提供一些示例代码,以允许其他人在问题中生成对象以避免歧义。另外,请发布您的答案,以防其他人有同样的问题。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
相关资源
最近更新 更多