Ответ 1
Любое одно из следующих двух:
df.dropna(subset=[1, 2], how='all')
или
df.dropna(subset=[1, 2], thresh=1)
Это расширение для этого вопроса, где 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: измененные значения фрейма данных для согласованности
Любое одно из следующих двух:
df.dropna(subset=[1, 2], how='all')
или
df.dropna(subset=[1, 2], thresh=1)
Указать dropna()
метод:
df.dropna(subset=[1,2], how='all')
'' 'СЕЙЧАС ЭТОТ КОДЕКС СРАВНИВАЕТ ДВЕ ИЗ МОЕЙ КОЛОННЫ, И НАХОДЯТСЯ 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')