이 게시물을 진행하기 전에 NaN과 None의 차이점 을 이해 하는 것이 중요합니다 . 하나는 float 유형이고 다른 하나는 객체 유형입니다. Pandas는 이러한 유형에 대한 많은 메서드를 벡터화 할 수 있으므로 스칼라 유형 작업에 더 적합합니다. Pandas는 None과 NaN을 일관되게 처리하려고하지만 NumPy는 처리 할 수 없습니다.
내 제안 ( and Andy 's )은 NaN을 고수하는 것입니다.
하지만 질문에 답하려면 ...
pandas> = 0.18 : na_values=['-']
인수 사용read_csv
이 데이터를 CSV / Excel에서로드했다면 좋은 소식이 있습니다. 후속 단계로 코드를 사용하여 수정 사항을 작성하는 대신 데이터로드 중에 루트에서이를 처리 할 수 있습니다.
대부분의 pd.read_*
함수 ( read_csv
및 등 read_excel
)는 na_values
속성을 허용 합니다.
file.csv
A,B
-,1
3,-
2,-
5,3
1,-2
-5,4
-1,-1
-,0
9,0
이제 -
문자를 NaN 으로 변환하려면 다음을 수행하십시오.
import pandas as pd
df = pd.read_csv('file.csv', na_values=['-'])
df
A B
0 NaN 1.0
1 3.0 NaN
2 2.0 NaN
3 5.0 3.0
4 1.0 -2.0
5 -5.0 4.0
6 -1.0 -1.0
7 NaN 0.0
8 9.0 0.0
다른 기능 / 파일 형식에 대해서도 유사합니다.
추신 : v0.24 +에서는 열에 NaN이 있어도 정수 유형을 유지할 수 있습니다 (예, 케이크를 먹고 먹는 것에 대해서도 이야기하십시오). 지정할 수 있습니다dtype='Int32'
df = pd.read_csv('file.csv', na_values=['-'], dtype='Int32')
df
A B
0 NaN 1
1 3 NaN
2 2 NaN
3 5 3
4 1 -2
5 -5 4
6 -1 -1
7 NaN 0
8 9 0
df.dtypes
A Int32
B Int32
dtype: object
dtype은 일반적인 int 유형이 아니라 Nullable Integer 유형입니다. 다른 옵션이 있습니다.
숫자 데이터 처리 : pd.to_numeric
witherrors='coerce
숫자 데이터를 다루는 경우 더 빠른 해결책은 인수 pd.to_numeric
와 함께 사용하는 것 입니다.이 errors='coerce'
인수는 유효하지 않은 값 (숫자로 캐스트 할 수없는 값)을 NaN으로 강제합니다.
pd.to_numeric(df['A'], errors='coerce')
0 NaN
1 3.0
2 2.0
3 5.0
4 1.0
5 -5.0
6 -1.0
7 NaN
8 9.0
Name: A, dtype: float64
(널 가능) 정수 dtype을 유지하려면 다음을 사용하십시오.
pd.to_numeric(df['A'], errors='coerce').astype('Int32')
0 NaN
1 3
2 2
3 5
4 1
5 -5
6 -1
7 NaN
8 9
Name: A, dtype: Int32
여러 열을 강제하려면 다음을 사용하십시오 apply
.
df[['A', 'B']].apply(pd.to_numeric, errors='coerce').astype('Int32')
A B
0 NaN 1
1 3 NaN
2 2 NaN
3 5 3
4 1 -2
5 -5 4
6 -1 -1
7 NaN 0
8 9 0
... 결과를 다시 할당합니다.
자세한 내용은 이 답변 에서 찾을 수 있습니다 .
write_frame
하지 구문 분석NaN
에들none
들?