我有一个数据框,可以从下面的代码中生成
data_file= pd.DataFrame({'studyid':[1,2,3],'age_interview': [' 56','57 ','55'],'ethnicity': ['Chinese','Indian','European'],'Marital_status': ['Single','Married','Widowed'],'Smoke_status':['Yes','No','No']})
创建以上数据框后,我将其融化并应用strip函数
obs = data_file.melt('studyid', value_name='valuestring').sort_values('studyid')
obs['valuestring'].str.strip()
尽管在示例数据中效果很好,但在实际数据中,它也会删除数值。我遵循与上面相同的代码,但是数据不同。
请找到剥离功能之前和之后的屏幕截图
在“ obs ['valuestring']。str.strip()”之前输出
“ obs ['valuestring']。str.strip()”之后的输出
如何防止删除数值?
答案 0 :(得分:1)
看起来您的列包含混合的整数和字符串。这是一个可重现的示例:
s = pd.Series([1, np.nan, 'abc ', 2.0, ' def '])
s.str.strip()
0 NaN
1 NaN
2 abc
3 NaN
4 def
dtype: object
如果该值不是字符串,则将其隐式处理为NaN。
解决方案是在调用strip之前将列及其所有值转换为字符串。
s.astype(str).str.strip()
0 1
1 nan
2 abc
3 2.0
4 def
dtype: object
您的情况应该是
obs['valuestring'] = obs['valuestring'].astype(str).str.strip()
请注意,如果要保留NaN,请在末尾使用mask
。
s.astype(str).str.strip().mask(s.isna())
0 1
1 NaN
2 abc
3 2.0
4 def
dtype: object