사용하지 않고 groupby
어떻게 데이터를 필터링하지 NaN
않습니까?
고객이 ‘N / A’, ‘n / a’또는 그 변형을 채우고 다른 사람들은 비워 두는 매트릭스가 있다고 가정 해 보겠습니다.
import pandas as pd
import numpy as np
df = pd.DataFrame({'movie': ['thg', 'thg', 'mol', 'mol', 'lob', 'lob'],
'rating': [3., 4., 5., np.nan, np.nan, np.nan],
'name': ['John', np.nan, 'N/A', 'Graham', np.nan, np.nan]})
nbs = df['name'].str.extract('^(N/A|NA|na|n/a)')
nms=df[(df['name'] != nbs) ]
산출:
>>> nms
movie name rating
0 thg John 3
1 thg NaN 4
3 mol Graham NaN
4 lob NaN NaN
5 lob NaN NaN
NaN 값을 어떻게 필터링하여 다음과 같이 결과를 얻을 수 있습니까?
movie name rating
0 thg John 3
3 mol Graham NaN
나는 비슷한 ~np.isnan
것이 필요하다고 생각 하지만 tilda는 문자열로 작동하지 않습니다.
답변
그냥 버리세요 :
nms.dropna(thresh=2)
이것은 적어도 두 개가 아닌 모든 행을 삭제합니다 NaN
.
그런 다음 name은 다음 위치에 놓을 수 있습니다 NaN
.
In [87]:
nms
Out[87]:
movie name rating
0 thg John 3
1 thg NaN 4
3 mol Graham NaN
4 lob NaN NaN
5 lob NaN NaN
[5 rows x 3 columns]
In [89]:
nms = nms.dropna(thresh=2)
In [90]:
nms[nms.name.notnull()]
Out[90]:
movie name rating
0 thg John 3
3 mol Graham NaN
[2 rows x 3 columns]
편집하다
실제로 원래 원하는 것을보고 dropna
전화 하지 않고이 작업을 수행 할 수 있습니다 .
nms[nms.name.notnull()]
최신 정보
3 년 후이 질문을 보면 실수가 있습니다. 먼저 thresh
arg는 적어도 값이 n
아닌 NaN
값을 찾습니다 . 실제로 출력은 다음과 같아야합니다.
In [4]:
nms.dropna(thresh=2)
Out[4]:
movie name rating
0 thg John 3.0
1 thg NaN 4.0
3 mol Graham NaN
내가 3 년 전에 잘못 생각했거나 내가 실행중인 판다 버전에 버그가 있었을 수 있습니다. 두 시나리오 모두 가능합니다.
답변
가장 간단한 솔루션 :
filtered_df = df[df['name'].notnull()]
따라서 ‘name’열에 NaN 값이없는 행만 필터링합니다.
여러 열의 경우 :
filtered_df = df[df[['name', 'country', 'region']].notnull().all(1)]
답변
df = pd.DataFrame({'movie': ['thg', 'thg', 'mol', 'mol', 'lob', 'lob'],'rating': [3., 4., 5., np.nan, np.nan, np.nan],'name': ['John','James', np.nan, np.nan, np.nan,np.nan]})
for col in df.columns:
df = df[~pd.isnull(df[col])]
답변
df.dropna(subset=['columnName1', 'columnName2'])