팬더 데이터 프레임에서 열의 일부 하위 집합에 대해서만 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=0
NaN을 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']