【发布时间】:2019-11-25 09:32:30
【问题描述】:
我正在根据字符串比较为我的 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()。两者都不起作用。我需要一个修复程序,让我可以对包含文本的任何列使用字符串之间的直接比较。
重新编辑: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
【问题讨论】:
-
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-8
标签: string pandas dataframe encoding byte