developer tip

Pandas 데이터 프레임 fillna () 일부 열만 제자리에 있음

optionbox 2020. 8. 11. 08:22
반응형

Pandas 데이터 프레임 fillna () 일부 열만 제자리에 있음


일부 열 하위 집합에 대해서만 Pandas 데이터 프레임의 값을 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

every None0's로 대체합니다 . 무엇 내가하고 싶은 만 교체 None열에들 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 = True를 사용하여 개체의 복사본을 만드는 것을 피할 수 있습니다.

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

한 줄로 모든 작업을 수행하는 방법은 다음과 같습니다.

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

Breakdown: df[['a', 'b']] selects the columns you want to fill NaN values for, value=0 tells it to fill NaNs with zero, and inplace=True will make the changes permanent, without having to make a copy of the object.


using the top answer produces a warning about making changes to a copy of a df slice. Assuming that you have other columns, a better way to do this is to pass a dictionary:
df.fillna({'A': 'NA', 'B': 'NA'}, inplace=True)


Or something like:

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

and if there is more:

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

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

반응형