我正在基于字符串比较为我的df(导入的CSV文件)制作遮罩,但是似乎.contains
有效,而==
无效。
此遮罩使用.contains
:
mask = (y_train['SEPSISPATOS'].str.contains('Yes')) | (y_train['SEPSHOCKPATOS'].str.contains('Yes')) | (y_train['OTHSYSEP'].str.contains('Sepsis')) | (y_train['OTHSESHOCK'].str.contains('Septic Shock'))
返回此输出(注意最后一行):
SEPSISPATOS SEPSHOCKPATOS OTHSYSEP OTHSESHOCK SEPSISPATOS
b'No' b'No' b'No Complication' b'No Complication' 0
b'No' b'No' b'No Complication' b'No Complication' 0
b'No' b'No' b'No Complication' b'No Complication' 0
b'No' b'No' b'No Complication' b'Septic Shock' 1
这另一个遮罩使用直接比较
mask = (y_train['SEPSISPATOS']=='Yes') | (y_train['SEPSHOCKPATOS']=='Yes') | (y_train['OTHSYSEP']=='Sepsis') | (y_train['OTHSESHOCK']=='Septic Shock')
返回:
SEPSISPATOS SEPSHOCKPATOS OTHSYSEP OTHSESHOCK SEPSISPATOS
b'No' b'No' b'No Complication' b'No Complication' 0
b'No' b'No' b'No Complication' b'No Complication' 0
b'No' b'No' b'No Complication' b'No Complication' 0
b'No' b'No' b'No Complication' b'Septic Shock' 0
想知道如果我有字节的字符串而不是Python 3 Unicode字符串,我已经尝试了解码(如下)。我也尝试过.str.strip()
。两者都不起作用。我需要一个修复程序,使我可以对包含文本的任何列使用字符串之间的直接比较。
编辑re:utf-8解码
NSQIPdf_train = pd.read_csv("acs_nsqip_puf13_2.csv")
str_df=df.select_dtypes([np.object])
str_df=str_df.stack().str.decode('utf-8').unstack()
for col in str_df:
NSQIPdf_train[col] = str_df[col]
y_train = NSQIPdf_train.loc[:,('SEPSISPATOS','SEPSHOCKPATOS', 'OTHSYSEP', 'OTHSESHOCK')]
这使我的问题更加复杂...随着输出变为:
SEPSISPATOS SEPSHOCKPATOS OTHSYSEP OTHSESHOCK SEPSISPATOS
NaN NaN NaN NaN 0
NaN NaN NaN NaN 0
NaN NaN NaN NaN 0
NaN NaN NaN NaN 0
答案 0 :(得分:0)
在进行比较之前,请使用.str.decode('utf-8')
将字节值转换为字符串(请参见question):
y_train['SEPSHOCKPATOS'].str.decode('utf-8') == 'Yes'
注意:我想.str.contains
会在幕后进行转换。
答案 1 :(得分:0)
我是Pandas的新手,但也许str.fullmatch
会有所帮助-匹配整个字符串的str.contains
的更严格版本,因此,
y_train['SEPSHOCKPATOS'].str.fullmatch('Yes')
尽管请注意,这实际上是在检查正则表达式,但是请注意所使用的字符串是否包含任何特殊字符。