【发布时间】:2021-12-12 23:26:52
【问题描述】:
我有一个这样的 df:
text labels
0 2083 [CARDINAL (0.8677)]
1 2085 [CARDINAL (0.5846)]
2 1822 [DATE (0.9581)]
3 DHAKA. [GPE (0.6306)]
4 BANGLADESH [GPE (0.6535)]
5 2085 [CARDINAL (0.7502)]
6 Manlkganj [GPE (0.8888)]
7 Bangladesh [GPE (0.9916)]
我想要的是:
text labels
0 2083, 2085 CARDINAL
1 1822 DATE
2 DHAKA. BANGLADESH GPE
3 2085 CARDINAL
4 Manlkganj Bangladesh GPE
合并相同标签的连续值并将它们合并并使其成为一行并删除不在ls=['GPE', 'ORG', 'CARDINAL']中的每隔一行。
我以一种更加非 Python 的方式完成了它,使用 df.iterrows() 循环遍历 df,然后在 ls 中使用 df['labels'].str.split('('][0],需要很多时间,也没有得到正确的预期结果。我想知道是否有更有效的方法,字符串操作和行操作。
df to dict 'dict' 格式重新创建:
{'text': {0: '2083',
1: '2085',
2: '1822',
3: 'DHAKA.',
4: 'BANGLADESH',
5: '2085',
6: 'Manlkganj',
7: 'Bangladesh',
8: 'DHAKA',
9: 'BANGLADESH'},
'start_pos': {0: 49,
1: 54,
2: 107,
3: 236,
4: 243,
5: 355,
6: 396,
7: 414,
8: 540,
9: 547},
'end_pos': {0: 53,
1: 58,
2: 111,
3: 242,
4: 253,
5: 359,
6: 405,
7: 424,
8: 545,
9: 557},
'labels': {0: [CARDINAL (0.8677)],
1: [CARDINAL (0.5846)],
2: [DATE (0.9581)],
3: [GPE (0.6306)],
4: [GPE (0.6535)],
5: [CARDINAL (0.7502)],
6: [GPE (0.8888)],
7: [GPE (0.9916)],
8: [GPE (0.5669)],
9: [GPE (0.878)]}}
提前致谢。
【问题讨论】:
-
您可以从
df.labels = df.labels.apply(lambda x: x.split(' (')[0][1:])开始转换标签列。 -
您的
labels列似乎包含(一个)对象的列表。CARDINAL/DATE/GPE是什么? -
实体。是的,列出一项。 @QuangHoang
标签: python pandas string dataframe search