복붙노트

[PYTHON] Pandas : 필요한 경우 NaN을 생성하여 숫자로 변환

PYTHON

Pandas : 필요한 경우 NaN을 생성하여 숫자로 변환

일부 숫자와 일부 숫자가 아닌 데이터 프레임에 열이 있다고 가정 해 보겠습니다.

>> df['foo']
0       0.0
1     103.8
2     751.1
3       0.0
4       0.0
5         -
6         -
7       0.0
8         -
9       0.0
Name: foo, Length: 9, dtype: object

이 열을 np.float로 변환하려면 어떻게해야하고 float이 아닌 다른 모든 것은 NaN으로 변환해야합니까?

내가 시도 할 때 :

>> df['foo'].astype(np.float)

또는

>> df['foo'].apply(np.float)

ValueError : 문자열을 부동으로 변환 할 수 없습니다. -

해결법

  1. ==============================

    1.팬더에서 0.17.0 convert_objects 경고 발생 :

    팬더에서 0.17.0 convert_objects 경고 발생 :

    pd.to_numeric 메서드를 사용하여 arg coerce를 사용하여 데이터 프레임에 적용 할 수 있습니다.

    df1 = df.apply(pd.to_numeric, args=('coerce',))
    

    또는보다 적절한 방법 일 수 있습니다 :

    df1 = df.apply(pd.to_numeric, errors='coerce')
    

    편집하다

    이 방법은 팬더 버전이 0.17.0 이상인 경우에만 유효하지만, docs는 판다 0.17.0의 새로운 기능 :

  2. ==============================

    2.convert_objects 시리즈 메소드 (및 convert_numeric)를 사용하십시오.

    convert_objects 시리즈 메소드 (및 convert_numeric)를 사용하십시오.

    In [11]: s
    Out[11]: 
    0    103.8
    1    751.1
    2      0.0
    3      0.0
    4        -
    5        -
    6      0.0
    7        -
    8      0.0
    dtype: object
    
    In [12]: s.convert_objects(convert_numeric=True)
    Out[12]: 
    0    103.8
    1    751.1
    2      0.0
    3      0.0
    4      NaN
    5      NaN
    6      0.0
    7      NaN
    8      0.0
    dtype: float64
    

    참고 :이 메서드는 DataFrame 메서드로 사용할 수도 있습니다.

  3. ==============================

    3.먼저 모든 문자열 값을 없음으로 대체하여 누락 값으로 표시 한 다음 부동 값으로 변환합니다.

    먼저 모든 문자열 값을 없음으로 대체하여 누락 값으로 표시 한 다음 부동 값으로 변환합니다.

    df['foo'][df['foo'] == '-'] = None
    df['foo'] = df['foo'].astype(float)
    
  4. ==============================

    4.적용을 사용하지 않고 단순히 pd.to_numeric을 사용하고 오류를 강제 변환 할 수 있습니다.

    적용을 사용하지 않고 단순히 pd.to_numeric을 사용하고 오류를 강제 변환 할 수 있습니다.

    df['foo'] = pd.to_numeric(df['foo'], errors='coerce')
    
  5. from https://stackoverflow.com/questions/18434208/pandas-converting-to-numeric-creating-nans-when-necessary by cc-by-sa and MIT license