python - 如何将pandas中的if/else转换为np.where

标签 python pandas numpy fillna

我的代码如下

将 pd.to_numeric 应用于应该是 int 或 float 但作为对象出现的列。我们可以像应用 np.where 一样将更多内容转换为 pandas

if df.dtypes.all() == 'object':
    df=df.apply(pd.to_numeric,errors='coerce').fillna(df)
else:
    df = df

最佳答案

一个简单的行是分配selest_dtypes,它将重新分配现有列

df.assign(**df.select_dtypes('O').apply(pd.to_numeric,errors='coerce').fillna(df))

np.where:

df[:] = (np.where(df.dtypes=='object',
          df.apply(pd.to_numeric,errors='coerce').fillna(df),df)

示例(检查价格列):

d = {'CusID': {0: 1, 1: 2, 2: 3},
     'Name': {0: 'Paul', 1: 'Mark', 2: 'Bill'},
     'Shop': {0: 'Pascal', 1: 'Casio', 2: 'Nike'},
     'Price': {0: '24000', 1: 'a', 2: '900'}}
df = pd.DataFrame(d)

print(df)
   CusID  Name    Shop  Price
0      1  Paul  Pascal  24000
1      2  Mark   Casio      a
2      3  Bill    Nike    900

df.to_dict()
{'CusID': {0: 1, 1: 2, 2: 3},
 'Name': {0: 'Paul', 1: 'Mark', 2: 'Bill'},
 'Shop': {0: 'Pascal', 1: 'Casio', 2: 'Nike'},
 'Price': {0: '24000', 1: 'a', 2: '900'}}

(df.assign(**df.select_dtypes('O').apply(pd.to_numeric,errors='coerce')
   .fillna(df)).to_dict())

{'CusID': {0: 1, 1: 2, 2: 3},
 'Name': {0: 'Paul', 1: 'Mark', 2: 'Bill'},
 'Shop': {0: 'Pascal', 1: 'Casio', 2: 'Nike'},
 'Price': {0: 24000.0, 1: 'a', 2: 900.0}}

关于python - 如何将pandas中的if/else转换为np.where,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62414669/

相关文章:

python - Pandas 多个 "group by"并比较不同列中的值

python - pandas 中的分组行

python - itertools 产品加速

python - “numpy.ndarray”对象没有属性 'drop'

python - Numpy 链式索引 "force"可查看而不是复制

python - Django - 无法在下拉列表中检索数据库中的数据

python - 使用Beautiful Soup刮过YouTube验证徽章的实例吗?

python - 如何用 float 捕获特定范围内的数字?

python - 打开网络浏览器后如何恢复程序(或退出)?

python - 在 Pandas 中有效地标记变量值