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变成字符串再判定,这样就不会出错,