String 比较数据帧中不工作的字符串?
我正在根据字符串比较为我的df(导入的CSV文件)制作一个掩码,但似乎String 比较数据帧中不工作的字符串?,string,pandas,dataframe,encoding,byte,String,Pandas,Dataframe,Encoding,Byte,我正在根据字符串比较为我的df(导入的CSV文件)制作一个掩码,但似乎.contains有效,但==无效 此掩码使用。包含: mask=(y_train['SEPSISPATOS'].str.contains('Yes'))(y_train['SEPSHOCKPATOS'].str.contains('Yes'))(y_train['OTHSYSEP'].str.contains('Sepsis'))(y_train['othshock'].str contains('Septic休克'))
.contains
有效,但==
无效
此掩码使用。包含
:
mask=(y_train['SEPSISPATOS'].str.contains('Yes'))(y_train['SEPSHOCKPATOS'].str.contains('Yes'))(y_train['OTHSYSEP'].str.contains('Sepsis'))(y_train['othshock'].str contains('Septic休克'))
返回此输出(注意最后一行):
SEPSISPATOS SEPSHOCKPATOS OTHSYSEP othshock SEPSISPATOS
b'No'b'No'b'无并发症'b'无并发症'0
b'No'b'No'b'无并发症'b'无并发症'0
b'No'b'No'b'无并发症'b'无并发症'0
“没有”没有“没有”并发症“感染性休克”1
而另一种掩模则采用直接比较法
mask=(y_train['SEPSISPATOS']='Yes')(y_train['SEPSHOCKPATOS']='Yes')(y_train['OTHSYSEP']='Sepsis')|(y_train['othsheshock']='Septic Shock'))
返回:
SEPSISPATOS SEPSHOCKPATOS OTHSYSEP othshock SEPSISPATOS
b'No'b'No'b'无并发症'b'无并发症'0
b'No'b'No'b'无并发症'b'无并发症'0
b'No'b'No'b'无并发症'b'无并发症'0
b'No'b'No'b'无并发症b'感染性休克'0
不知道我是否有字节的字符串而不是Python3Unicode字符串,我尝试了解码(如下)。我也试过.str.strip()
。两者都不起作用。我需要一个修复程序,使我能够对任何包含文本的列使用字符串之间的直接比较
编辑re:utf-8解码
NSQIPdf\u train=pd.read\u csv(“acs\u nsqip\u puf13\u 2.csv”)
str_df=df。选择数据类型([np.object])
str_df=str_df.stack().str.decode('utf-8').unstack()
对于str_df中的col:
NSQIPdf_列[col]=str_df[col]
y_train=NSQIPdf_train.loc[:,('SEPSISPATOS','SEPSHOCKPATOS','OTHSYSEP','othshock')]
这进一步加剧了我的问题。。。当输出变为:
SEPSISPATOS SEPSHOCKPATOS OTHSYSEP othshock SEPSISPATOS
楠楠0
楠楠0
楠楠0
楠楠0
在进行比较之前,请使用.str.decode('utf-8')
将字节值转换为字符串(请参见此):
注意:我猜.str.contains
会在引擎盖下进行转换。在进行比较之前,使用.str.decode('utf-8')
将字节值转换为字符串(请参见此):
注:我猜
.str.contains
在引擎盖下进行转换。我是熊猫的新手,但可能str.fullmatch
有帮助-更严格版本的str.contains
匹配整个字符串,因此
y_train['SEPSHOCKPATOS'].str.fullmatch('Yes')
虽然请注意,这实际上是在检查正则表达式,但请注意您使用的字符串是否包含任何特殊字符。我是Pandas的新手,但可能
str.fullmatch
有帮助-更严格版本的str.contains
匹配整个字符串,因此
y_train['SEPSHOCKPATOS'].str.fullmatch('Yes')
请注意,这实际上是针对正则表达式进行检查,因此请注意您使用的字符串是否包含任何特殊字符。
y_train['SEPSHOCKPATOS'].str.=('Yes')
不是有效的Python语法。此外,'Yes'
周围的括号是一个字符。.str
是一个访问器,所以y_train['SEPSHOCKPATOS'].str='Yes'
没有做你认为它做的事情(试着打印y_train['SEPSHOCKPATOS'].str
)谢谢你,我已经做了这些更改并更新了原始帖子中的代码(第三块)以反映这一点,但是y_train['SEPSISPATOS']='Yes'似乎也不起作用。与之前相同的输出。.str.decode('utf-9')
应该是utf-8y_train['SEPSHOCKPATOS']。str.==('Yes')
不是有效的Python语法此外,'Yes'
周围的括号是一个分心符,.str
是一个访问器,因此y_train['SEPSHOCKPATOS'].str=='Yes'
没有做你认为它会做的事情(试着打印y_train['SEPSHOCKPATOS'].str
)谢谢你,我已经做了这些更改并更新了原始帖子中的代码(第三块)来反映它,但是y_train['sepsipatos']=='Yes'似乎也不起作用。与之前相同的输出。.str.decode('utf-9')
应该是utf-8I尝试了两个y_序列['SEPSHOCKPATOS']。str.decode('utf-8')=='Yes',结果与之前相同。基于您建议中的链接,我还尝试了预先解码整个df,这实际上导致了更多的问题。打印出y_train['SEPSHOCKPATOS'].str.decode('utf-8')给了我NaNs。我尝试了两个y_train['SEPSHOCKPATOS'].str.decode('utf-8')=='Yes',结果与之前相同。基于您建议中的链接,我还尝试了预先解码整个df,这实际上导致了更多的问题。打印出y_train['SEPSHOCKPATOS'].str.decode('utf-8')会让我感到不安。