Подтвердить что ты не робот

Python - строка Drop, если два столбца - NaN

Это расширение для этого вопроса, где OP хотел знать, как удалить строки, где значения в одном столбце - NaN.

Мне интересно, как я могу отбросить строки, где значения в столбцах 2 (или более) и NaN. Используя второй ответ, созданный Data Frame:

In [1]: df = pd.DataFrame(np.random.randn(10,3))

In [2]: df.ix[::2,0] = np.nan; df.ix[::4,1] = np.nan; df.ix[::3,2] = np.nan;

In [3]: df
Out[3]:
          0         1         2
0       NaN       NaN       NaN
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
3  0.672201  0.964789       NaN
4       NaN       NaN  0.050742
5 -1.250970  0.030561 -2.678622
6       NaN  1.036043       NaN
7  0.049896 -0.308003  0.823295
8       NaN       NaN  0.637482
9 -0.310130  0.078891       NaN

Если я использую команду drop.na(), в частности drop.na(subset=[1,2]), то она завершает "или" тип drop и оставляет:

In[4]: df.dropna(subset=[1,2])
Out[4]: 
          0         1         2
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
5 -1.250970  0.030561 -2.678622
7  0.049896 -0.308003  0.823295

То, что я хочу, это "и" тип drop, где он отбрасывает строки, где есть NaN в столбце index 1 и 2. Это оставило бы:

          0         1         2
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
3  0.672201  0.964789       NaN
4       NaN       NaN  0.050742
5 -1.250970  0.030561 -2.678622
6       NaN  1.036043       NaN
7  0.049896 -0.308003  0.823295
8       NaN       NaN  0.637482
9 -0.310130  0.078891       NaN

где удаляется только первая строка.

Любые идеи?

EDIT: измененные значения фрейма данных для согласованности

4b9b3361

Ответ 1

Любое одно из следующих двух:

df.dropna(subset=[1, 2], how='all')

или

df.dropna(subset=[1, 2], thresh=1)

Ответ 2

Указать dropna() метод:

df.dropna(subset=[1,2], how='all')

Ответ 3

'' 'СЕЙЧАС ЭТОТ КОДЕКС СРАВНИВАЕТ ДВЕ ИЗ МОЕЙ КОЛОННЫ, И НАХОДЯТСЯ 6 КОММЕНТАРИЙ КОЛОННЫ, КОТОРЫЕ У Я ЕСТЬ 4 КОЛОННЫ. ТЕПЕРЬ Я ПЫТАЮСЯ ДАТЬ БОЛЕЕ ДВА КОЛОННЫ В МОЕМ ЗАЯВЛЕНИИ DROPNA, НО Я УГЛАШАЮ ДУШУ 1 НЕ СДЕЛАТЬ БОЛЬШЕ, ЧЕМ ОДИН, КАК ЭТО УДАЛЯЕТ СТРОКУ, ТОЛЬКО ЕСЛИ ВСЕ НАН, как в случае "Как = все".

ЭТОТ ОТВЕТ БЫЛ УБРАТЬ СТРОКИ ТОЧНО 2 НАН. '' '

import pandas as pd
import numpy as np
import re

a = np.random.randint(0,10,(30,4))
b = pd.DataFrame(a,columns = ['aa','bb','cc','dd'])

c = b.sample(6)
c.aa = 311
c.bb = 311
b.update(c)

d = b.sample(2)
d.cc = 311
d.dd = 311
b.update(d)




b = b.replace(311, np.nan)
print('*'*30)
print('ORIGNAL DATA FRAME IS :  ')
print('*'*30)
print(b)
b.to_csv('C:\\Users\\HP\\Desktop\\CSV\\ORIGNAL_DATA.csv')
#print(b)
b = b.dropna(subset = ['aa','bb'],thresh = 1)
b = b.dropna(subset = ['aa','cc'],thresh = 1)
b = b.dropna(subset = ['aa','dd'],thresh = 1)
b = b.dropna(subset = ['bb','cc'],thresh = 1)
b = b.dropna(subset = ['bb','dd'],thresh = 1)
b = b.dropna(subset = ['cc','dd'],thresh = 1)

print('*'*30)
print('REQUIRED DATA FRAME IS :  ')
print('*'*30)
print(b)
print('*'*30)
print(b.count())

b.to_csv('C:\\Users\\HP\\Desktop\\CSV\\MANIPULATED_DATA.csv')