Как преобразовать if / else в np. Где в pandas - PullRequest
1 голос
/ 16 июня 2020

Мой код ниже

применить pd.to_numeri c к столбцам, где должно быть int или float, но как объект. Можем ли мы преобразовать больше в pandas, например, применив np.where

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

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Эквивалент вашего if / else: df.mask

df_out = df.mask(df.dtypes =='O', df.apply(pd.to_numeric, errors='coerce')
                                    .fillna(df))
1 голос
/ 16 июня 2020

Простой лайнер - assign с 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)

Пример (отметьте Price столбец):

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}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...