Как мне найти числовые столбцы в кадре данных, которые также содержат нулевые значения? - PullRequest
0 голосов
/ 29 сентября 2018

Фрейм данных выглядит следующим образом:

          col1  col2   col3    col4    col5    col6    col7
points                                                    
x1         0.6  '0'   'first'  0.93   'lion'   0.34   0.98
x2         0.7  '1'  'second'  0.47    'cat'   0.43   0.76
x3         NaN  '0'   'third'  0.87  'tiger'   0.24   0.10
x4         0.6  '0'   'first'  0.93   'lion'   0.34   0.98
x5         0.5  '1'   'first'  0.32     NaN    0.09   NaN
x6         0.4  '0'   'third'  0.78  'tiger'   0.18   0.17
x7         0.5  '1'  'second'  0.98    'cat'   0.47   0.78 

numeric=df.select_dtypes(include=["number"])
others=df.select_dtypes(exclude=["number"])
print(numeric)

output:
          col4   col6
points                                                    
x1        0.93   0.34
x2        0.47   0.43   
x3        0.87   0.24   
x4        0.93   0.34   
x5        0.32   0.09   
x6        0.78   0.18   
x7        0.98   0.47   

Но мне нужно, чтобы вывод был таким:

          col1  col4    col6    col7
points                                                    
x1         0.6  0.93    0.34   0.98
x2         0.7  0.47    0.43   0.76
x3         NaN  0.87    0.24   0.10
x4         0.6  0.93    0.34   0.98
x5         0.5  0.32    0.09   NaN
x6         0.4  0.78    0.18   0.17
x7         0.5  0.98    0.47   0.78 

Я понимаю, что NaN обрабатывается как объект, и эти столбцы перемещаются others.Как я могу обнаружить столбцы, даже основываясь на значениях в столбце?

1 Ответ

0 голосов
/ 29 сентября 2018

Ваш вопрос сводится к:

Как я могу преобразовать столбцы, которые означали , в числовые, но в настоящее время имеют object dtype.

Как только эта проблема будет решена, pd.DataFrame.select_dtypes будет работать как нужно.Подразумевается, что вы заранее не знаете, какие серии должны быть числовыми.Но вы можете попробовать и преобразовать столбцы в числовые значения, которые в настоящее время имеют тип object dtype.Если вы найдете ненулевые значения, вы можете применить преобразование.

for col in df.select_dtypes(include=['object']):
    s = pd.to_numeric(df[col], errors='coerce')
    if s.notnull().any():
        df[col] = s

print(df.dtypes)

points     object
col1      float64
col2       object
col3       object
col4      float64
col5       object
col6      float64
col7      float64
dtype: object

Логика будет работать для представленных вами данных.Это не сработает, например, когда у вас есть ряд в основном строк и несколько чисел.В этой ситуации вам потребуется определить более точную логику, чтобы определить, какие серии следует считать числовыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...