programing

판다: 모든 NaN과 함께 열을 내립니다.

iphone6s 2023. 7. 21. 21:26
반응형

판다: 모든 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

반응형