python - Pandas strip 函数也会删除数值
问题描述
我有一个可以从下面的代码生成的数据框
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()”之后的输出
如何防止数字值被删除?
解决方案
看起来您的列混合了整数和字符串。这是一个可重现的示例:
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
在末尾使用 a。
s.astype(str).str.strip().mask(s.isna())
0 1
1 NaN
2 abc
3 2.0
4 def
dtype: object
推荐阅读
- c++ - 在我看来,在 [basic.lookup.argdep]/3 的示例中调用 g(parm, 1) 有两个候选函数
- c# - Asp.Net Core 2.1 中发生了什么变化,引入了一种模糊匹配来获取包含反射的方法
- java - 读取字符串列表中的名称
- python - 计算每行数据帧 A 出现在另一个数据帧中的许多元素的每一行中的次数
- python - asyncio.create_task 与等待
- python - AWS lambda Python期望','分隔符异常
- c++ - 如何在 UWP C# 中获取设备句柄以传递给 WriteFile
- javascript - 我尝试使用 p5.js 进行基于内核的图像处理
- scala - 在 ZIO 中,有没有办法将 IO[Nothing, T] 转换为 T,如果没有,为什么不呢?
- html - 布局:需要一个可以比同一行中的其他单元格更大的单元格