剥离对象系列而不删除系列中的 int/float 个单元格

strip object series without deleting the int/float cells in the series

我有一系列类型 object,当使用 Series.str.strip() 时,仅包含 int 的单元格会变成 Nan

如何避免这种情况?


例子

sr = pd.Series([1,2,3,'foo   '])
sr.str.strip()

0    NaN
1    NaN
2    NaN
3    foo
dtype: object

期望的结果

0    1
1    2
2    3
3    foo
dtype: object

最简单的就是Series.fillna:

用原始值替换缺失值
sr = pd.Series([1,2,3,'foo   '])

sr.str.strip().fillna(sr)

或仅剥离由 isinstance 测试的字符串:

print (sr.apply(lambda x: x.strip() if isinstance(x, str) else x))

0      1
1      2
2      3
3    foo
dtype: object

您可以将系列全部转换为 str,然后删除:

>>> sr.astype(str).str.strip()

0      1
1      2
2      3
3    foo
dtype: object

这样 1 变成 "1" 并且在剥离时保持不变。但它们最后仍将是字符串,而不是整数;不确定这是否是所需的输出。