cqwcns 发表于 2020-12-8 16:43

Python+pandas根据条件包含apply

环境是Python+pandas,以下代码是多条件apply,条件是【资源类型】=”自建宽带“或”自建铁通融合宽带“,或【五级地址名称】包含”海心路茂名职业技术学院“。

    sheetOnTheWay['是否纳入统计'] = sheetOnTheWay.apply(
      lambda x: "是" if x.资源类型 == '自建宽带' or x.资源类型 == '自建铁通融合宽带' or x.五级地址名称.str.contains(
            '海心路茂名职业技术学院') else "否", axis=1)

但第3个条件,判断包含报错,AttributeError: 'float' object has no attribute 'str',应该怎么改?谢谢。

787821 发表于 2020-12-8 17:12

看你的提示显示的需要字符串类型,你的是浮点型,查看一下你数据里的数据吧.
我的用法是= data[~data["xx"].str.contains('xx1|xx2') & ~data["xx"].str.startswith("xxx")]//包含,不包含,左包含

anmox 发表于 2020-12-8 17:27

sheetOnTheWay['是否纳入统计']=‘否’
sheetOnTheWay.loc[(sheetOnTheWay.资源类型=='自建宽带')|(sheetOnTheWay.资源类型=='自建铁通融合宽带')|(sheetOnTheWay.五级地址名称.str.contains('海心路茂名职业技术学院')),'是否纳入统计']='是'

手写的有可能符号不太对,可以照着这个思路试试

yzqhj 发表于 2020-12-8 18:26

把运行截图出来啊,就一句报错,,,数据也没看到,,,看这样子肯定是数据类型问题,这种就先定位哪一行,哪个数据,转一下就ok了

choolyee 发表于 2020-12-8 18:33

一楼应该猜对了,应该是你这一列里混进了纯数字,先把不符合要求的数据清洗出去吧

wanshiz 发表于 2020-12-9 07:01

进来学一下,在看Python。感谢楼主的帖。

rsnodame 发表于 2020-12-9 17:55

{:301_1009:} 如果确定是第三个条件报错的话,说明这一列的数据类型有float啊…………有点怪感觉

cqwcns 发表于 2020-12-11 10:17

rsnodame 发表于 2020-12-9 17:55
如果确定是第三个条件报错的话,说明这一列的数据类型有float啊…………有点怪感觉

已解决。

    # 资源类型等于自建宽带、自建铁通融合宽带,或包含三个指定地址的,保留,其他清洗
    sheetOnTheWay['是否纳入统计'] = sheetOnTheWay.apply(
      lambda x: "是" if x.资源类型 == '自建宽带' or x.资源类型 == '自建铁通融合宽带' or str(x.五级地址名称).find('海心路茂名职业技术学院') >= 0 or str(
            x.五级地址名称).find('海城路五路1号茂名职业技术学院') >= 0 or str(x.五级地址名称).find('官渡街道文明路茂名职业技术') >= 0 else "否", axis=1)
页: [1]
查看完整版本: Python+pandas根据条件包含apply