gpt4 book ai didi

python - extend() 不生成列表

转载 作者:行者123 更新时间:2023-12-01 23:48:53 24 4
gpt4 key购买 nike

我正在处理一个字符串列表和一个包含字符串的数据框。想象一下这样的场景:

A = ['the', 'a', 'with', 'from', 'on']
和一个数据框:
df = {'col1':['string', 'string'], 'col2':['the man from a town', 'the man on a bus']}

我现在正在尝试在我的 data_frame 中创建一个新列,它将在我的 data_frame 的第 2 列中显示值,这些值在我的列表 A 中(在本例中:the、from、a)

我写的是这样的:

def words_in_A(row):      res=[]     for item in A:          if item in row:              res.extend(item)               return resdf[col3] = df[col2].apply(lambda x: words_in_A(x))

我希望输出是一个包含多个值的列表:

col 1          col2                   col3string         the man from a town    'the', 'from', 'a'string         the man on a bus       'the', 'on', 'a'

但该函数只返回最后一项 ('a') 而不是列表。我不确定为什么这种 extend() 的使用没有为我生成一个列表。请帮忙!

最佳答案

您的代码只需要稍微调整一下缩进并使用 append 而不是 extend。如果您扩展,则字符串 'the' 将被视为一个列表,并且每个字母都将附加到收集列表中。

def words_in_A(row): 
lst = []
for item in A:
if item in row:
lst.append(item)
return lst

老实说,虽然列表理解甚至 Shubham 使用正则表达式的回答会比 apply 更快,但我的观点是正确的。这是您的数据框的时间,但有 20,000 行而不是 2 行。

with apply 0.078s
with list comp 0.076s
with regex 0.168s
with regex, no join 0.141s

和测试代码

from time import time

t0 = time()
df['col3'] = df['col2'].apply(words_in_A)
print('with apply', f'{time() - t0:.3f}s')

t0 = time()
df['col3'] = [[item for item in A if item in row] for row in df.col2]
print('with list comp', f'{time() - t0:.3f}s')

t0 = time()
pat = rf"(?i)\b(?:{'|'.join(A)})\b"
df['col3'] = df['col2'].str.findall(pat).str.join(', ')
print('with regex', f'{time() - t0:.3f}s')

t0 = time()
pat = rf"(?i)\b(?:{'|'.join(A)})\b"
df['col3'] = df['col2'].str.findall(pat)
print('with regex, no join', f'{time() - t0:.3f}s')

输出

         col1                 col2          col3
0 string the man from a town the, from, a
1 string a person on a bus a, on, a
2 string the man from a town the, from, a
3 string a person on a bus a, on, a
4 string the man from a town the, from, a
... ... ... ...
19995 string a person on a bus a, on, a
19996 string the man from a town the, from, a
19997 string a person on a bus a, on, a
19998 string the man from a town the, from, a
19999 string a person on a bus a, on, a

[20000 rows x 3 columns]

关于python - extend() 不生成列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63729209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com