df选取列名中带有特定字符的列并在原df修改

似乎现有df并没有简单选取列名中带有特定字符的列并进行修改的函数,虽然通过

df.filter(like="xxx")

可以获得筛选出的数据,但是这是df的一个拷贝,修改它并不会改变原来的df内容,可以使用

cols=df.filter(like="xxx").columns.values
for i in cols:
   df[i]=yourfunction(df[i])

这样就可以曲线救国,获得它的列名了!再通过原来的df直接对列名索引,就可以完成修改了。但是仔细想想就会发现这个方法很蠢,因为筛选得到了df,却只用了索引,所以只当不用对原df修改时,可以使用df.filter函数,但是如果需要修改的话,该函数并不是很好的选择。此时我们直接获取原df的所有列名,并对列名先行筛选,就能达到同样的效果,而不用生成一个冗余的df。实际好用的方法是:

cols0=df.columns.values
cols=filter(lambda x: "xxx" in x,cols0)

看着更简洁的方法:

cols0=df.columns.values
cols=[col for col in cols0 if "xxx" in col]

实际上它们也都是for循环加上逻辑表达式实现的,只是对于筛选数据方面来说,提供了更简单的形式。这里的"xxx" in col可以换成其它任何对元素的筛选规则。

补充:在验证df.filter函数是否为拷贝的时候,注意到将df传参时,传的也是引用,所以其实

df[i]=yourfunction(df[i])

这一步如果是返回df[i]的话,并不需要返回再赋值,在函数内就已经对df[i]本身的内容修改过了。python很多类型默认传引用的点需要经常注意,很容易忘记导致出错。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值