【问题标题】:Python Pandas select rows by a string condition and then update the relevant column valuesPython Pandas 通过字符串条件选择行,然后更新相关的列值
【发布时间】:2018-05-13 22:00:30
【问题描述】:

我有一个数据框:

d = pd.DataFrame({'month':[1,2,3,4,5,6,7,8], 'flavour':['strawberry1%aw','strawberry','banana','banana','strawberry','strawberry','banana1%a11','banana1%20']})

我想删除风味列中 % 之后的字符串:

sep = "%"
mask = d.flavour.str.contains(sep)
d.loc[mask,'_id'].map(lambda x: x.split(sep, 1)[0])

如何确保在原始数据框中更新这些值?预期的最终数据帧如下:

【问题讨论】:

  • d 不是你的数据框吗?
  • d 是一个数据框的例子..

标签: python pandas split contains


【解决方案1】:
sep = "%"
mask = d.flavour.str.contains(sep)

使用“掩码”和列名将值更新回原始数据框 (d),如下所示:

d.loc[mask,'flavour']=d.loc[mask,'flavour'].map(lambda x: x.split(sep, 1)[0])

【讨论】:

  • 此答案目前被标记为低质量。不过感谢您的回答。建议你也添加一些解释,以便其他人容易理解。
【解决方案2】:

让我们使用split

d.flavour=d.flavour.apply(lambda x :x.split('%')[0])
d
Out[111]: 
       flavour  month
0  strawberry1      1
1   strawberry      2
2       banana      3
3       banana      4
4   strawberry      5
5   strawberry      6
6      banana1      7
7      banana1      8

【讨论】:

  • 他希望将month 替换为%,而不是在每个项目的末尾附加month!
  • 这绝对是更好的答案,无需生成掩码。
  • @Wen 我不确定,但他的预期数据与图像不同!
  • 不妨使用矢量化访问器:flavour.str.split("%").str[0]。
猜你喜欢
  • 2020-12-12
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 2016-11-02
  • 2013-10-15
  • 2021-01-04
  • 1970-01-01
  • 2017-04-05
相关资源
最近更新 更多