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
와 함께0
s. 제가 하고 싶은 것은,None
s열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=0
NaN에 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
'source' 카테고리의 다른 글
Django auto_now 및 auto_now_add (0) | 2022.12.28 |
---|---|
PHP에서 여러 클래스를 사용하여 클래스를 확장할 수 있습니까? (0) | 2022.12.28 |
JVM 인수가 "-D"로 시작하는 이유는 무엇입니까? (0) | 2022.12.28 |
Java Generics(와일드카드) (0) | 2022.12.28 |
변수를 사용하여 객체 속성에 동적으로 액세스 (0) | 2022.12.28 |