我有以下DataFrame,其中包含有关某个产品的各种信息。 Input3 是创建的句子列表,如下所示:
sentence_list = (['Køb online her','Sammenlign priser her','Tjek priser fra 4 butikker','Se produkter fra 4 butikker', 'Stort udvalg fra 4 butikker','Sammenlign og køb'])
df["Input3"] = np.random.choice(sentence_list, size=len(df))
Full_Input 是通过连接各个列而创建的字符串,其内容类似于:“品牌的产品名称-在此处在线购买-网站名称”。它是这样创建的:
df["Full_Input"] = df['TitleTag'].astype(str) + " " + df['Input2'].astype(str) + " " + df['Input3'].astype(str) + " " + df['Input4'].astype(str) + " " + df['Input5'].astype(str)
这里的问题是 Full_Input_Length 应该小于55。因此,我试图找出如何在随机生成 Input3 时放置条件其他列的字符串,则整个输入长度不会超过55。
这是我尝试过的:
for col in range(len(df)):
condlist = [df["Full_Input"].apply(len) < 55]
choicelist = [sentence_list]
df['Input3_OK'][col] = np.random.choice.select(condlist, choicelist)
不出所料,它不能那样工作。 np.random.choice.select
无关紧要,我遇到了AttributeError。
我该怎么做呢?
答案 0 :(得分:1)
如果保证您在Input3
中至少有一项可以满足此条件,则您可能想尝试一些类似的操作,例如仅对sentence_list
中的值为可接受的长度:
# convert to series to enable use of pandas filtering mechanism:
my_sentences = [s for s in sentence_list if len(s) < MAX_LENGTH]
# randomly select from this filtered list:
np.random.choice(my_sentences)
换句话说,在调用random.choice
之前,对每个字符串列表执行过滤。
您可以像这样对数据框中的每一行运行此操作:
def choose_string(full_input):
return np.random.choice([
s
for s in sentence_list
if len(s) + len(full_input) < 55
])
df["Input3_OK"] = df.Full_Input.map(choose_string)