pandas在某行某列中加字符串,筛选某行某列含字符串

pandas在某行某列中加字符串,筛选某行某列含字符串

import pandas as pd

chengji=[[100,95,100,98],[90,98,99,94],[88,95,98,95],[99,98,97,92],[95,90,96,88],[94,94,93,77]]
data=pd.DataFrame(chengji,columns=['语文','类别','数学','政治'])


data4=data.copy(deep=True)
data4=data4[['语文','数学']]
data5=data4[data4['数学'] >=95]
print("*"*50,"筛选数学大于95")
print(data5)

data4=data.copy(deep=True)
data5=data4[~(data4['政治'] >=95)]  #~取反,要注意()
print("*"*50,"筛选政治小于95")
print(data5)

data4=data.copy(deep=True)
data4.loc[1]="优"+data4.loc[1].astype(str)  #~取反,要注意()
print("*"*50,"行前加字符")
print(data4)
data5=data4[['语文','数学']][data4['数学'].str[0:1]==("优")]  #.astype(str)
 #全部采用时,可去掉前的面[['语文','数学']]
print("*"*50,"筛选出行前有优字符")
print(data5)
data5=data4[data4['数学'].astype(str).str.contains("优")]
print("*"*50,"筛选出行前有优字符")
print(data5)


data4=data.copy(deep=True)
data4['政治']="优"+data4['政治'].astype(str)  #str,'str'都可以
print("*"*50,"列前加字符")
print(data4)
data5=data4.loc[:,data4.loc[1].astype(str).str.contains("优")] 
print("*"*50,"筛选出列前有优字符")
print(data5)
data5=data4.loc[:, data.columns.str.contains('语|数')]
print("*"*50,"筛选出列名有语|数字符")
print(data5)

需要注意的是:
data5=data4[data4[‘数学’].astype(str).str.contains(“优”)]
print("*"*50,“筛选出行前有优字符”)
print(data5)

如果写成只转变字符时,死活都通不过,一定要加上.astype(str)
data5=data4[data4[‘数学’].str.contains(“优”)]


data5=data4[[‘语文’,‘数学’]][data4[‘数学’].str[0:1](“优”)] 却可以通过
当然这里写成
data5=data4[[‘语文’,‘数学’]][data4[‘数学’].astype(str).str[0:1]
(“优”)]
也没有问题

当判断列时,一定要指定某行,也可以在列标题中找符合条件的
data5=data4.loc[:,data4.loc[1].astype(str).str.contains(“优”)]
print("*“50,“筛选出列前有优字符”)
print(data5)
data5=data4.loc[:, data.columns.str.contains(‘语|数’)]
print("
”*50,“筛选出列名有语|数字符”)
print(data5)

总之,保险点,就把判定的某行,某列即series,转为str,再用pandas中的.str.contains或直接用.str变成字符串再判定,这样就不会出错,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值