栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将pandas.Series从dtype对象转换为float,将错误转换为nans

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将pandas.Series从dtype对象转换为float,将错误转换为nans

使用[
pd.to_numeric
](http://pandas.pydata.org/pandas-

docs/stable/generated/pandas.to_numeric.html)与

errors='coerce'

# Setups = pd.Series(['1', '2', '3', '4', '.'])s0    11    22    33    44    .dtype: objectpd.to_numeric(s, errors='coerce')0    1.01    2.02    3.03    4.04    NaNdtype: float64

如果需要

NaN
填写,请使用
Series.fillna

pd.to_numeric(s, errors='coerce').fillna(0, downcast='infer')0    11    22    33    44    0dtype: float64

注意,

downcast='infer'
在可能的情况下,将尝试将浮点型转换为整数。如果不需要,请删除该参数。

从v0.24 +起,pandas引入了Nullable Integer类型,该类型允许整数与NaN共存。如果列中有整数,则可以使用

pd.__version__# '0.24.1'pd.to_numeric(s, errors='coerce').astype('Int32')0      11      22      33      44    NaNdtype: Int32

还有其他选项可供选择,请阅读文档以获取更多信息。


扩展为
Dataframes

如果需要将此扩展到Dataframes,则需要
其应用于每一行。您可以使用进行此操作

Dataframe.apply

# Setup.np.random.seed(0)df = pd.Dataframe({    'A' : np.random.choice(10, 5),     'C' : np.random.choice(10, 5),     'B' : ['1', '###', '...', 50, '234'],     'D' : ['23', '1', '...', '268', '$$']})[list('ABCD')]df   A    B  C    D0  5    1  9   231  0  ###  3    12  3  ...  5  ...3  3   50  2  2684  7  234  4   $$df.dtypesA     int64B    objectC     int64D    objectdtype: objectdf2 = df.apply(pd.to_numeric, errors='coerce')df2   A      B  C      D0  5    1.0  9   23.01  0    NaN  3    1.02  3    NaN  5    NaN3  3   50.0  2  268.04  7  234.0  4    NaNdf2.dtypesA      int64B    float64C      int64D    float64dtype: object

您也可以使用

Dataframe.transform
;
尽管我的测试表明这稍微慢一些:

df.transform(pd.to_numeric, errors='coerce')   A      B  C      D0  5    1.0  9   23.01  0    NaN  3    1.02  3    NaN  5    NaN3  3   50.0  2  268.04  7  234.0  4    NaN

如果您有许多列(数字;非数字),则可以通过

pd.to_numeric
仅对非数字列应用来提高性能。

df.dtypes.eq(object)A    FalseB     TrueC    FalseD     Truedtype: boolcols = df.columns[df.dtypes.eq(object)]# Actually, `cols` can be any list of columns you need to convert.cols# Index(['B', 'D'], dtype='object')df[cols] = df[cols].apply(pd.to_numeric, errors='coerce')# Alternatively,# for c in cols:#     df[c] = pd.to_numeric(df[c], errors='coerce')df   A      B  C      D0  5    1.0  9   23.01  0    NaN  3    1.02  3    NaN  5    NaN3  3   50.0  2  268.04  7  234.0  4    NaN

对于较长的Dataframe

pd.to_numeric
,沿列应用(即,
axis=0
默认值)应稍快一些。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/652524.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号