首页 > 解决方案 > 从 Pandas 中的混合 dtype 系列中选择具有给定 dtype 的行

问题描述

我有一个来自 Excel 电子表格的 Pandas 系列,主要是浮动的,但由于货币位于不同的语言环境中,因此有一些字符串未解析:

s = pd.Series(['1,23', '4.56,78', 1, 2.0, np.nan])

我只想选择那些是字符串的项目,以便我可以应用转换:

s[s.apply(type) == str] = s[s.apply(type) == str].str.replace('.', '').str.replace(',', '.')
s.astype(float)

0      1.23
1    456.78
2      1.00
3      2.00
4       NaN
dtype: float64

但我找不到一种好的(内置的、矢量化的)方法来逐行获取或选择 dtypes。有没有更好的办法?

标签: pythonpandas

解决方案


您可以使用str.translate同时做这两件事(转换、更改 dtype):

pd.to_numeric(s.str.translate(str.maketrans({'.': '', ',': '.'}))).fillna(s)

0      1.23
1    456.78
2      1.00
3      2.00
4       NaN
dtype: float64

dtype'float64'


推荐阅读