Join 函数删除字符串的第一个字符 | Python & 数据清理

Join Function Removes first char of string | Python & Data cleaning

我编写了一个函数来从文本数据(存储在 pandas 中的字符串)

中删除图像 link
image_link_1 = 'â\x80¦IMAGEâ\x80¦' 
image_link_2 = 'IMAGE'

def remove_image(text):
    remove_im = ''.join([i for i in text if i not in image_link_1 and image_link_2])
    return remove_im

df['title_and_abstract'] = df['title_and_abstract'].apply(lambda x: remove_image(x))

问题是,该函数删除了某个字符串的第一个字母。特别是该函数似乎只删除大写字母。奇怪。

这是一个例子

'This is an example string. Here is the IMAGE.'

函数使用后:

'his is an example string. Here is the .'

我真的不明白为什么这个函数会那样做。

提前致谢!

  • for i in text 将文本分成单个字符;如果你想要单词,那就是 for i in text.split()
  • and image_link_2 检查 image_link_2 是否为非空,总是为真;你可能想要的是 if i not in [image_link_1, image_link_2]

希望这些能帮助您摆脱困境?

我也是Python新弟子,所以想把自己的想法解释一下,希望对以后看帖的人有所帮助

如前一个答案正确所述,原始函数仅迭代单个字符(I、M、A、G、E)而不是单词(IMAGE)。这也导致删除 image_link_1 & 2.

中定义的所有单个字符

text.split() 解决了这个问题,因为原始字符串被拆分成单词而不是字符。

工作代码:

def remove_link(text): 
    remove_im = ' '.join([i for i in text.split() if i not in [image_link_1, image_link_2]])
    return remove_im

df['title_and_abstract'] = df['title_and_abstract'].apply(lambda x: remove_link(x))