在列中找到元组列表的第一个元素的第一个单词?

find the first word of the first element of a list of tuples in a column?

我有这样的数据帧:

import pandas as pd

test = {'text': [
    ('tom-mark', 'tom', 'tom is a good guy.'),
    ('Nick X','nick', 'Is that Nick?')
]}, {'text': [
    ('juli', 'juli', 'Tom likes juli so much.'),
    ('tony', 'tony', 'Steve and Tony listen in as well.')
]}

我想在每个元组的第一个元素中找到第一个单词(即 tom、Nick、juli、tony)。

我尝试了以下代码,但它无法处理 tom-mark' 中的'-'

    name = t[0].lower()
    name = name.split()
    name = name[0]

但是,有些元组的第一个元素是 2 个单词。我怎样才能找到每个元组的第一个单词?

这样的事情有帮助吗:

import re

test = {'text': [
    ('tom-mark', 'tom', 'tom is a good guy.'),
    ('Nick X','nick', 'Is that Nick?'),
    ('juli', 'juli', 'Tom likes juli so much.'),
    ('tony', 'tony', 'Steve and Tony listen in as well.')]
}

first_names = []

for names in test['text']:
    name = re.match(r'\w+', names[0])
    first_names.append(name[0].lower())


print(first_names)

['tom', 'nick', 'juli', 'tony']

您可以使用 pandas 数据框并使用函数映射 text 列的值以获取名字,然后从列表列表中为该特定列创建一个列表。

在函数内部,使用正则表达式从该列表中的所有元组中仅提取名字,并return一个名字列表。

import pandas as pd
import re


def get_first(x):
    return list(map(lambda tup: re.match(r'\w+', tup[0])[0].lower(), x))

test = {'text': [
    ('tom-mark', 'tom', 'tom is a good guy.'),
    ('Nick X','nick', 'Is that Nick?')
]}, {'text': [
    ('juli', 'juli', 'Tom likes juli so much.'),
    ('tony', 'tony', 'Steve and Tony listen in as well.')
]}

data = sum(pd.DataFrame(test).applymap(get_first)['text'].tolist(), [])

print(data)