Получить данные о наличии нулевых значений в определенном столбце и удалить другие нулевые столбцы - PullRequest
0 голосов
/ 29 марта 2019

У меня есть такой фрейм данных:

rawdata = {'col1': [3 ,nan ,4 ,7 ,nan ,5], 
'col2': [10 ,20 ,10 ,30 ,10 ,40], 
'col3': [23 ,34 ,45 ,56 ,34 ,23], 
'col4': [5 ,4 ,nan ,5 ,1 ,nan], 
'col5': [28 ,33 ,33 ,4 ,nan ,44]}

Что мне нужно:

  1. Удалить все nan, включая столбцы, кроме col4
  2. Получите данные, где col4 равно nan

В конце концов, мне нужно указать ниже:

target = {'col2': [10 ,40],
'col3': [45 ,23], 
'col4': [nan ,nan]}

Вот код:

rawdata.drop(["col1", "col5"], axis = 1, inplace= True)
rawdata = rawdata[rawdata.isnull().any(axis=1)][rawdata .columns[rawdata .isnull().any()]]

Однако, это возвращает мне только сам col4.Мне тоже нужны col2 и col3.

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Если вы согласны с жестким кодированием столбцов, содержащих наночастицы (как показывает ваш собственный пример), это просто сводится к df.drop(['col1', 'col5'], axis=1)[df.col4.isna()].С вашими тестовыми данными:

In [13]: df
Out[13]:
   col1  col2  col3  col4  col5
0   3.0    10    23   5.0  28.0
1   NaN    20    34   4.0  33.0
2   4.0    10    45   NaN  33.0
3   7.0    30    56   5.0   4.0
4   NaN    10    34   1.0   NaN
5   5.0    40    23   NaN  44.0

In [14]: df.drop(['col1', 'col5'], axis=1)[df.col4.isna()]
Out[14]:
   col2  col3  col4
2    10    45   NaN
5    40    23   NaN

Если вы не хотите жестко кодировать эти столбцы, другой подход будет

In [35]: df.drop(df.columns[df.isna().any()].difference({'col4'}), axis=1)[df.col4.isna()]
Out[35]:
   col2  col3  col4
2    10    45   NaN
5    40    23   NaN
1 голос
/ 29 марта 2019

Я предполагаю, что вы построили фрейм данных с df = pd.DataFrame(rawdata)

Сначала я бы собрал серию, содержащую столбцы для хранения:

keep = df.count() == len(df)
deep['col4'] = True

Тогда вы просто хотите:

df.loc[df.col4.isna(), keep]

, что дает, как и ожидалось:

   col2  col3  col4
2    10    45   NaN
5    40    23   NaN

Если вы хотите диктовать, это просто df.loc[df.col4.isna(), keep].to_dict()

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