판다: 모든 NaN과 함께 열을 내립니다.
다음과 같은 데이터 프레임이 있습니다.
0 1 2 3 4 5 6 7
0 #0915-8 NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN LIVE WGT NaN AMOUNT NaN TOTAL
2 GBW COD NaN NaN 2,280 NaN $0.60 NaN $1,368.00
3 POLLOCK NaN NaN 1,611 NaN $0.01 NaN $16.11
4 WHAKE NaN NaN 441 NaN $0.70 NaN $308.70
5 GBE HADDOCK NaN NaN 2,788 NaN $0.01 NaN $27.88
6 GBW HADDOCK NaN NaN 16,667 NaN $0.01 NaN $166.67
7 REDFISH NaN NaN 932 NaN $0.01 NaN $9.32
8 GB WINTER FLOUNDER NaN NaN 145 NaN $0.25 NaN $36.25
9 GOM WINTER FLOUNDER NaN NaN 25,070 NaN $0.35 NaN $8,774.50
10 GB YELLOWTAIL NaN NaN 26 NaN $1.75 NaN $45.50
모두 삭제합니다.NaN3개 이상의 열뿐만 아니라NaNs (둘 중 하나 또는 둘 다 작동해야 한다고 생각합니다.)나는 이 코드를 시도했습니다.
fish_frame.dropna()
fish_frame.dropna(thresh=len(fish_frame) - 3, axis=1)
그러나 데이터 프레임에는 아무런 영향을 미치지 않는 것 같습니다. 나중에 동일한 결과가 나타납니다.
코드의 문제점과 수정 방법은 무엇입니까?
에서dropnadocstring:
모든 요소가 NaN인 열을 놓습니다.
df.dropna(axis=1, how='all')
A B D
0 NaN 2.0 0
1 3.0 4.0 1
2 NaN NaN 5
dropna()null 값을 삭제하고 dataFrame을 반환합니다.원래 dataFrame에 다시 할당합니다.
fish_frame = fish_frame.dropna(axis = 1, how = 'all')
코드 참조:
fish_frame.dropna(thresh=len(fish_frame) - 3, axis=1)
이렇게 하면 NaN이 7개 이상인 열(슬라이드 렌(df) = 10개)이 삭제됩니다. 앞서 언급한 것처럼 Nan이 3개 이상인 열을 삭제하려면 임계값이 3과 같아야 합니다.
dropna()기본적으로 데이터 프레임을 반환합니다.inplace=False따라서 코드에 유지하기 위해 새 데이터 프레임에 할당해야 합니다.
예를 들어,
fish_frame = fish_frame.dropna()
왜 당신의dropna빈 데이터 프레임을 반환하고 있습니다. dropna 메서드(https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html) 의 "how" 인수를 참조하는 것이 좋습니다.축=0은 열에 해당하고 축=1은 행에 해당합니다.
따라서 모든 "NA", 축=0, ="any"가 있는 열을 제거하는 방법:
fish_frame = fish_frame.dropna(axis=0, how="any")
마지막으로, "임계값" 인수는 드롭이 발생하기 위해 필요한 NA의 수를 명시적으로 지정합니다.
fish_frame = fish_frame.dropna(axis=0, thresh=3, how="any")
세 개의 NA가 있는 열을 제거하려면 잘 작동해야 합니다.
또한 Corley가 지적했듯이 how="any"가 기본값이므로 필요하지 않습니다.
또 다른 해결책은 null이 아닌 위치에서 True 값을 가진 부울 데이터 프레임을 만든 다음 True 값이 하나 이상인 열을 가져오는 것입니다.아래 줄은 모든 NaN 값을 가진 열을 제거합니다.
df = df.loc[:,df.notna().any(axis=0)]
하나 이상의 결측값(NaN)이 있는 열을 제거하려면;
df = df.loc[:,df.notna().all(axis=0)]
이 방법은 빈 문자열, 0 또는 기본적으로 지정된 값을 포함하는 열을 제거할 때 특히 유용합니다.예를 들어,
df = df.loc[:,(df!='').all(axis=0)]
하나 이상의 빈 문자열이 있는 열을 제거합니다.
언급URL : https://stackoverflow.com/questions/45147100/pandas-drop-columns-with-all-nans
'programing' 카테고리의 다른 글
| @PathVariable과 @RequestBody 결합 (0) | 2023.07.21 |
|---|---|
| Pandas 데이터 프레임의 문자열을 '날짜' 데이터 유형으로 변환하려면 어떻게 해야 합니까? (0) | 2023.07.21 |
| 두 날짜 사이의 월을 찾는 가장 좋은 방법 (0) | 2023.07.21 |
| Gradle의 Spring Boot에서 Tomcat 종속성 제외 (0) | 2023.07.21 |
| numpy 배열에서 모드를 찾는 가장 효율적인 방법 (0) | 2023.07.21 |