从熊猫数据框中删除相似的行

Posted

技术标签:

【中文标题】从熊猫数据框中删除相似的行【英文标题】:removing similar rows from pandas dataframe 【发布时间】:2019-05-01 21:06:30 【问题描述】:

刚接触数据科学,想从事一个简单的项目(使用 Jupyter Notebook 和 Python 3.7)。基本上我想用 NLP 来查找美国电视节目前 50 名中最常见的短语。然而,我遇到了一个障碍。我拥有的数据集将节目的季节存储为单独的条目。例如,我有一些看起来像这样的东西:

南方公园第 14 季 合家欢第三季 南方公园第 10 季 南方公园第 11 季 南方公园第 13 季 合家欢第 1 季 生活大爆炸第 8 季

我对前 50 个独特节目感兴趣。有没有办法过滤或删除 Pandas DataFrame 中的类似条目?可以保留第一个条目但删除所有其他条目的东西? (我计划从每个节目中收集每一集的成绩单,因此只要删除类似条目以为其他独特条目腾出空间,电视节目的第一个实例就无关紧要了)。

我正在尝试找出可以返回这个的东西(基于上面的示例):

南方公园第 14 季 合家欢第三季 生活大爆炸第 8 季

不幸的是,我是一个新手,不知道从哪里开始,无论是正则表达式、字符串切片等。

感谢您的帮助!

【问题讨论】:

请在问题中添加您尝试过的任何内容。谢谢。 【参考方案1】:

您似乎有一个标准的命名约定,因此您可以在此处使用正则表达式根据特定季节之前的文本删除重复项。

设置

df = pd.DataFrame('show': 0: 'South Park Season 14',
  1: 'Family Guy Season 3',
  2: 'South Park Season 10',
  3: 'South Park Season 11',
  4: 'South Park Season 13',
  5: 'Family Guy Season 1',
  6: 'The Big Bang Theory Season 8')

str.extract + drop_duplicates:

df.loc[
  df.show.str.extract(r'(.*)\s?Season').drop_duplicates().index
]

                           show
0          South Park Season 14
1           Family Guy Season 3
6  The Big Bang Theory Season 8

如果您只想要节目名称,而不是具体的季节,那就更简单了:

 df.show.str.extract(r'(.*)\s?Season').drop_duplicates()

                     0
0           South Park
1           Family Guy
6  The Big Bang Theory

【讨论】:

这是一个非常基本的示例,在节目名称之后有不同的变化,但这是一个很好的起点。对于不同的变体,我假设我可以使用条件句和 [^ ]?感谢您的快速回复! 你能提供一个例子来说明你的问题吗?模糊字符串匹配是这里的另一种选择。 模糊字符串匹配看起来可能会有所帮助。所以除了上面的标题,我还有《实习医生格蕾:第四季》之类的实例和《蝎子'》之类的乱七八糟的数据

以上是关于从熊猫数据框中删除相似的行的主要内容,如果未能解决你的问题,请参考以下文章

如何识别和标记熊猫数据框中的相似行

删除熊猫数据框中具有特定值的行[重复]

如何从包含前两列组合的熊猫数据框中删除行

FutureWarning:元素比较失败;从熊猫数据框中删除所有行时

如何根据条件表达式从熊猫数据框中删除行[重复]

如何根据条件表达式从熊猫数据框中删除行[重复]