为了账号安全,请及时绑定邮箱和手机立即绑定

从列中删除以“X”结尾的条目

从列中删除以“X”结尾的条目

肥皂起泡泡 2023-05-16 16:44:58
我有一列电影片名。其中一些标题包括电影的发行日期(例如“玩具总动员 (1995)”),但有些则没有。我想删除没有日期的条目。我试图通过说“如果最后一个字符不是')'来做到这一点,将整个条目留空。” 我尝试了以下代码 - 它没有给我错误,但也没有用:for i in df['title']:   if i[-1] != ')':      i = ''例如,短路数据帧可能是:df = pd.DataFrame({'title': ['Toy Story (1995)', 'The Matrix (1999)', 'Jumanji', 'Interstellar (2014)']})
查看完整描述

3 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

如果日期格式只是电影标题末尾括号中的年份,请尝试:


import re

df = pd.DataFrame({'movie':['Toy Story (1995)','Toy Story (no date)','Oddyssey 2000', 'Fort 6600', 'The Matrix (1999)', 'Jumanji', 'Interstellar (2014)']})

df:


                 movie

0     Toy Story (1995)

1  Toy Story (no date)

2        Oddyssey 2000

3            Fort 6600

4    The Matrix (1999)

5              Jumanji

6  Interstellar (2014)

使用正则表达式:


df[df.movie.apply(lambda x: bool(re.search('\([1-2][0-9]{3}\)$', x)))]

结果:


                 movie

0     Toy Story (1995)

4    The Matrix (1999)

6  Interstellar (2014)

非年份或不在括号中的数字将不会包含在结果中。我假设年份必须以 1 或 2 开头。


查看完整回答
反对 回复 2023-05-16
?
繁星coding

TA贡献1797条经验 获得超4个赞

这是因为变量i存储数据的副本,而不是原始引用。


所以,你应该这样做:


for i in range(len(df['title'])):

    if df['title'][i][-1] != ')':

        df['title'][i] = ''


查看完整回答
反对 回复 2023-05-16
?
狐的传说

TA贡献1804条经验 获得超3个赞

i仅存储数据,它不是对列表项的引用。


你可以用枚举来做到这一点:


for index, element in enumerate(df['title']):

    if element[-1] != ')':

        df['title'][index] = ''


查看完整回答
反对 回复 2023-05-16
  • 3 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信