source

Panda dataframe fillna() 일부 열만 지정

gigabyte 2022. 12. 28. 21:36
반응형

Panda dataframe fillna() 일부 열만 지정

Panda 데이터 프레임에서 일부 열에 대해서만 0으로 값을 채우지 않으려고 합니다.

할 때:

import pandas as pd
df = pd.DataFrame(data={'a':[1,2,3,None],'b':[4,5,None,6],'c':[None,None,7,8]})
print df
df.fillna(value=0, inplace=True)
print df

출력:

     a    b    c
0  1.0  4.0  NaN
1  2.0  5.0  NaN
2  3.0  NaN  7.0
3  NaN  6.0  8.0
     a    b    c
0  1.0  4.0  0.0
1  2.0  5.0  0.0
2  3.0  0.0  7.0
3  0.0  6.0  8.0

모든 것을 대신합니다.None와 함께0s. 제가 하고 싶은 것은,Nones열a그리고.b, 그러나 아니다.c.

어떻게 하면 좋을까요?

원하는 열을 선택하고 할당별로 수행할 수 있습니다.

df[['a', 'b']] = df[['a','b']].fillna(value=0)

결과는 예상대로입니다.

     a    b    c
0  1.0  4.0  NaN
1  2.0  5.0  NaN
2  3.0  0.0  7.0
3  0.0  6.0  8.0

사용할 수 있습니다.dict,fillna열마다 값이 다르다

df.fillna({'a':0,'b':0})
Out[829]: 
     a    b    c
0  1.0  4.0  NaN
1  2.0  5.0  NaN
2  3.0  0.0  7.0
3  0.0  6.0  8.0

다시 할당한 후

df=df.fillna({'a':0,'b':0})
df
Out[831]: 
     a    b    c
0  1.0  4.0  NaN
1  2.0  5.0  NaN
2  3.0  0.0  7.0
3  0.0  6.0  8.0

Wen의 솔루션과 inplace를 사용하면 오브젝트의 복사를 피할 수 있습니다=참:

df.fillna({'a':0, 'b':0}, inplace=True)
print(df)

그 결과:

     a    b    c
0  1.0  4.0  NaN
1  2.0  5.0  NaN
2  3.0  0.0  7.0
3  0.0  6.0  8.0

top answer를 사용하면 df 슬라이스 복사본 변경에 대한 경고가 생성됩니다.다른 열이 있다고 가정하면 사전을 전달하는 것이 더 좋습니다.
df.fillna({'A': 'NA', 'B': 'NA'}, inplace=True)

복사 경고 없이 작동해야 합니다.

df[['a', 'b']] = df.loc[:,['a', 'b']].fillna(value=0)

이 모든 것을 한 줄에 정리할 수 있는 방법은 다음과 같습니다.

df[['a', 'b']].fillna(value=0, inplace=True)

내역:df[['a', 'b']]NaN 값을 채울 열을 선택합니다.value=0NaN에 0을 채우도록 지시합니다.inplace=True는 오브젝트를 복사하지 않고 영구적인 변경을 합니다.

또는 다음과 같습니다.

df.loc[df['a'].isnull(),'a']=0
df.loc[df['b'].isnull(),'b']=0

기타가 있는 경우:

for i in your_list:
    df.loc[df[i].isnull(),i]=0

어떤 이상한 이유로 이것은 작동하지 않았다 (판다: 0.25 사용).1')

df[['col1', 'col2']].fillna(value=0, inplace=True)

또 다른 솔루션:

subset_cols = ['col1','col2']
[df[col].fillna(0, inplace=True) for col in subset_cols]

예:

df = pd.DataFrame(data={'col1':[1,2,np.nan,], 'col2':[1,np.nan,3], 'col3':[np.nan,2,3]})

출력:

   col1  col2  col3
0  1.00  1.00   nan
1  2.00   nan  2.00
2   nan  3.00  3.00

목록 comp.를 fillna 값에 적용합니다.

subset_cols = ['col1','col2']
[df[col].fillna(0, inplace=True) for col in subset_cols]

출력:

   col1  col2  col3
0  1.00  1.00   nan
1  2.00  0.00  2.00
2  0.00  3.00  3.00

이 구문이 기능하지 않을 수 있습니다.

df[['col1','col2']] = df[['col1','col2']].fillna()

대신 다음을 사용하십시오.

df['col1','col2']

언급URL : https://stackoverflow.com/questions/38134012/pandas-dataframe-fillna-only-some-columns-in-place

반응형