[python] 팬더 데이터 프레임 fillna () 일부 열만 배치

팬더 데이터 프레임에서 열의 일부 하위 집합에 대해서만 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로 바꿉니다 0. 무엇 내가하고 싶은 만 교체 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)

분류 : df[['a', 'b']]NaN 값을 채우려는 열을 선택하고 value=0NaN을 0으로 채우도록 지시 inplace=True하며 개체의 복사본을 만들지 않고 변경 사항을 영구적으로 만듭니다.


답변

최상위 답변을 사용하면 df 슬라이스 사본을 변경하는 것에 대한 경고가 생성됩니다. 다른 열이 있다고 가정하면 더 좋은 방법은 사전을 전달하는 것입니다.
df.fillna({'A': 'NA', 'B': 'NA'}, 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


답변

때때로이 구문은 작동하지 않습니다 :

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

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

df['col1','col2']