pandas:如何从深度嵌套的列表中删除重复项

     2023-02-23     104

关键词:

【中文标题】pandas:如何从深度嵌套的列表中删除重复项【英文标题】:pandas: how to remove duplicates from a deeply nested list of lists 【发布时间】:2021-09-18 18:18:03 【问题描述】:

我有一个如下所示的熊猫数据框:

df = pd.DataFrame( 'text':['the weather is nice though', 'How are you today','the beautiful girl and the nice boy'])
df['sentence_number'] = df.index + 1
df['token'] = df['text'].str.split().tolist()
df= df.explode('token').reset_index(drop=True)

我必须有一列用于标记,因为我需要它用于另一个项目。我已将以下内容应用于我的数据框。

import spacy
nlp = spacy.load("en_core_web_sm")

dep_children_sm = []

def dep_children_tagger(txt):
    children = [[[child for child in n.children] for n in doc] for doc in nlp.pipe(txt)]
    dep_children_sm.append(children)


dep_children_tagger(df.text)

由于必须在句子级别应用 n.children 方法,因此我必须使用文本列而不是标记列,因此输出具有重复列表。我现在想从我的列表 'dep_children_sm' 中删除这些重复,并且我已经完成了以下操作,

children_flattened =[item for sublist in dep_children_sm for item in sublist]
list(k for k,_ in itertools.groupby(children_flattened))

但什么也没发生,我仍然有重复的列表。我也尝试在调用函数时将 drop_duplicates() 添加到文本列,但问题是我的原始数据框中有重复的句子,不幸的是不能这样做。

desired output = [[[], [the], [weather, nice, though], [], []], [[], [How, you, today], [], []], [[], [], [the, beautiful, and, boy], [], [], [], [the, nice]]]

【问题讨论】:

目前还不清楚您要做什么。你能提供预期的输出数据框吗?此外,您的代码不可重现,因为 nlp 未定义。 对不起,我添加了输出和 nlp 信息 @mozway,我刚刚意识到问题出在哪里,虽然我不知道如何处理它。问题是 children_flattened 是 nlp.tokens 列表的列表,所以这就是 itertools 方法不起作用的原因。我想如果有办法将列表转换为字符串,它可能会起作用 【参考方案1】:

好的,我想出了如何解决这个问题。问题是 nlp.text 输出一个关于 spacy 标记的列表列表,并且由于这个嵌套列表中没有任何字符串,所以 itertools 不起作用。 由于我无法在分析中从文本列中删除重复项,因此我执行了以下操作。

d =[' '.join([str(c) for c in lst]) for lst in children_flattened]
list(set(d))

这会输出一个不包括重复项的字符串列表

# ['[] [How, you, today] [] []',
# '[] [the] [weather, nice, though] [] []',
# '[] [] [the, beautiful, and, boy] [] [] [] [the, nice]']

【讨论】:

【参考方案2】:

您似乎想将您的功能应用于独特的文本。因此,您可以首先在 df.text 上使用pandas.Series.unique 方法

>>> df['text'].unique()
array(['the weather is nice though', 'How are you today',
       'the beautiful girl and the nice boy'], dtype=object)

然后我会简化你的函数来直接输出结果。不需要全局列表。此外,您的函数正在添加额外级别的列表,这似乎是不需要的。

def dep_children_tagger(txt):
    return [[[child for child in n.children] for n in doc] for doc in nlp.pipe(txt)]

最后,将你的函数应用于独特的文本:

dep_children_sm = dep_children_tagger(df['text'].unique())

这给出了:

>>> dep_children_sm
[[[], [the], [weather, nice, though], [], []],
 [[], [How, you, today], [], []],
 [[], [], [the, beautiful, and, boy], [], [], [], [the, nice]]]

【讨论】:

感谢您的回复。不幸的是,我不能那样做。我在我的问题中也提到过,我的原始 df 中有一些重复的句子,不幸的是我无法删除重复的句子或得到唯一的句子

从 Python 列表中删除重复项

...布时间】:2009-07-1713:45:48【问题描述】:如果想根据每个嵌套列表的第一个元素评估重复项,谁能提出一个从嵌套列表中删除重复项的好解决方案?主列表如下所示:L=[[\'14\',\'65\',76],[\'2\',\'5\',6],[\'7\',\'12\',33],[\'14\',\'22\ 查看详情

如何从我的列表中删除重复项? [复制]

】如何从我的列表中删除重复项?[复制]【英文标题】:HowcanIremoveduplicatesfrommylist?[duplicate]【发布时间】:2021-06-3014:16:05【问题描述】:我正在使用SwiftUI在视图中生成这个动态列表(显示生成列表的一部分):薰衣草柠檬石灰石... 查看详情

如何从 Python Pandas DataFrame 中的循环结果中删除重复项?

】如何从PythonPandasDataFrame中的循环结果中删除重复项?【英文标题】:HowtoremoveduplicatesfromloopresultsinPythonPandasDataFrame?【发布时间】:2021-05-2211:46:12【问题描述】:我有如下Python数据框:df=pd.DataFrame("ID1":[1,2,3],"ID2":[44,55,66])然后我... 查看详情

从列表中删除(并计算)重复项

...是否可以在同一个列表的两个迭代器之间进行迭代并删除嵌套迭代器中的一个项目?版本1(不起作用):vari=all.iterator();while(i.hasNext())vara=i.next();varj=all.iterator();while(j.hasN 查看详情

如何从列表 Dart 中删除重复项 |扑

】如何从列表Dart中删除重复项|扑【英文标题】:HowtoDeleteduplicateitemsfromaListDart|Flutter【发布时间】:2021-12-1015:56:34【问题描述】:我有一套物品。从这里我想删除所有重复的值。我试过这个finalList=[......users!];和这个print(users.toSet... 查看详情

如何从Java列表中删除重复项

】如何从Java列表中删除重复项【英文标题】:HowtoremoveduplicatesfromSetoflistinJava【发布时间】:2021-12-1314:38:04【问题描述】:我有一组列表,我想从无论每个列表中的元素顺序如何删除重复项,如下所示:我有这个作为输入[[-1,-1,2]... 查看详情

如何有效地删除列表列表中的连续重复项?

】如何有效地删除列表列表中的连续重复项?【英文标题】:Howtodeleteconsecutiveduplicatesinalistoflistsefficiently?【发布时间】:2019-08-1305:12:27【问题描述】:我有一个嵌套列表:l=[[\'GILTI\',\'was\',\'intended\',\'to\',\'to\',\'stifle\',\'multinationa... 查看详情

从列表中删除重复项?

...复项,但我想从我的适配器中删除这些重复项,并在知道如何打印后将其打印出来?提前致谢。得到:在我的卡片视图中重复行但通过API。想要:只想打印一次并删除那些重复项。我的适配器:@OverridepublicvoidonBindViewHolder(@NonNullc 查看详情

如何使用列表理解从列表中删除重复项? [复制]

】如何使用列表理解从列表中删除重复项?[复制]【英文标题】:Howtoremoveduplicateitemsfromalistusinglistcomprehension?[duplicate]【发布时间】:2012-05-1922:21:07【问题描述】:如何使用列表推导从列表中删除重复项?我有以下代码:a=[1,2,3,3,... 查看详情

从 2D 列表中删除连续重复项,python?

...a2Dlist,python?【发布时间】:2014-04-1921:15:43【问题描述】:如何根据特定元素(在本例中为第二个元素)从2d列表中删除连续重复项。我尝试了一些与itertools的组合,但没有运气。谁能建议我如何解决这个问题?输入192.168.1.232>&g... 查看详情

从对象数组中的嵌套数组中删除重复项

】从对象数组中的嵌套数组中删除重复项【英文标题】:Removeduplicatesfromnestedarrayinarrayofobjects【发布时间】:2021-08-2316:23:57【问题描述】:我有这个对象数组:constarrayOfObjects=[id:10,children:[1000],id:10,children:[2000],id:20,children:[1000],id:2... 查看详情

如何从 Python 列表中删除重复项并保持顺序? [复制]

】如何从Python列表中删除重复项并保持顺序?[复制]【英文标题】:HowtoremoveduplicatesfromPythonlistandkeeporder?[duplicate]【发布时间】:2010-10-0313:18:03【问题描述】:给定一个字符串列表,我想按字母顺序对其进行排序并删除重复项。... 查看详情

使用 Guava 从列表中删除重复项

...singGuava【发布时间】:2012-08-2720:23:51【问题描述】:我们如何在Guavaapi的帮助下从List中删除重复项?目前我正在关注这个:privateList<T>removeDuplicate(List<T>list)returnnewArrayList<T>(newLinked 查看详情

如何在 python 中使用 pandas 获取所有重复项的列表?

】如何在python中使用pandas获取所有重复项的列表?【英文标题】:HowdoIgetalistofalltheduplicateitemsusingpandasinpython?【发布时间】:2013-01-1709:52:17【问题描述】:我有一份可能存在出口问题的物品清单。我想获取重复项目的列表,以便... 查看详情

从嵌套地图对象javascript中删除重复项

】从嵌套地图对象javascript中删除重复项【英文标题】:Removeduplicatesfromnestedmapobjectsjavascript【发布时间】:2019-09-1203:48:41【问题描述】:我正在使用看起来像的嵌套地图在网格上显示数据this.state.rows.map((qc)=>qc.BinsByDayByOrchardsQCs.... 查看详情

如何通过 Oracle regexp_replace 从空格分隔列表中删除重复项? [复制]

】如何通过Oracleregexp_replace从空格分隔列表中删除重复项?[复制]【英文标题】:HowtoremoveduplicatesfromspaceseparatedlistbyOracleregexp_replace?[duplicate]【发布时间】:2017-03-0815:18:48【问题描述】:我有一个名为“ABAACD”的列表。我的预期结... 查看详情

从 Ocaml 中的列表列表中删除重复项?

】从Ocaml中的列表列表中删除重复项?【英文标题】:RemovingduplicatesfromalistoflistsinOcaml?【发布时间】:2021-07-0120:24:42【问题描述】:我是Ocaml的新手,我被分配仅使用List模块删除列表列表的所有重复项。这是我写的代码:letsort_an... 查看详情

如何通过 Oracle 中的正则表达式从逗号分隔列表中删除重复项,但我不想要重复值? [复制]

】如何通过Oracle中的正则表达式从逗号分隔列表中删除重复项,但我不想要重复值?[复制]【英文标题】:HowtoremoveduplicatesfromcommaseparatedlistbyregexinOraclebutIdon\'twantduplicatesvalues?[duplicate]【发布时间】:2018-08-0703:08:33【问题描述】:... 查看详情