>

팬더에 데이터 프레임이 있습니다 :

0                       1                   2
([0.8898668778942382    0.89533945283595]   0)
([1.2632564814188714    1.0207660696232244] 0)
([1.006649166957976     1.1180973832359227] 0)
([0.9653632916751714    0.8625538463644129] 0)
([1.038366333873932     0.9091449796555554] 0)

모든 값은 문자열입니다. 모든 특수 문자를 제거하고 double로 변환하고 싶습니다. 나는 점과 같은 모든 특수 문자를 제거하는 기능을 적용하고 싶다

import re
re.sub('[^0-9.]+', '',x)

그래서 이것을 데이터 프레임의 모든 셀에 적용하고 싶습니다. 어떻게하니? df.applymap 함수를 찾았지만 문자열을 인수로 전달하는 방법을 모르겠습니다. 나는 시도했다

def remSp(x): 
    re.sub('^[0-9]+', '',x)
df.applymap(remSp())

그러나 셀을 함수에 전달하는 방법을 모르겠습니다. 더 좋은 방법이 있습니까?

감사합니다

  • 답변 # 1

    왜 정규식으로 직접 df에서 기본 바꾸기 방법을 사용할 수 없는가

    df = df.replace('[^\d.]', '',regex=True).astype(float)
    
    

              0 1 2
    0 0.889867 0.895339 0.0
    1 1.263256 1.020766 0.0
    2 1.006649 1.118097 0.0
    3 0.965363 0.862554 0.0
    4 1.038366 0.909145 0.0
    

    다른 답변보다 여전히 빠릅니다.

  • 답변 # 2

    applymap 사용

    In [814]: df.applymap(lambda x: re.sub(r'[^\d.]+', '', x)).astype(float)
    Out[814]:
              0         1    2
    0  0.889867  0.895339  0.0
    1  1.263256  1.020766  0.0
    2  1.006649  1.118097  0.0
    3  0.965363  0.862554  0.0
    4  1.038366  0.909145  0.0
    
    

    transform 사용

    In [809]: df.transform(lambda x: x.str.replace(r'[^\d.]+', '')).astype(float)
    Out[809]:
              0         1    2
    0  0.889867  0.895339  0.0
    1  1.263256  1.020766  0.0
    2  1.006649  1.118097  0.0
    3  0.965363  0.862554  0.0
    4  1.038366  0.909145  0.0
    
    

  • 답변 # 3

    열 반복, str.replace 호출 .

    for c in df.columns:
        df[c] = df[c].str.replace('[^\d.]', '')
    df = df.astype(float)
    df
              0         1  2
    0  0.889867  0.895339  0
    1  1.263256  1.020766  0
    2  1.006649  1.118097  0
    3  0.965363  0.862554  0
    4  1.038366  0.909145  0
    
    

    불행히도, pandas  아직 데이터 프레임에서 문자열 접근 자 작업을 전체적으로 지원하지 않으므로 열을 반복하는 대안은 램 디드 applymap/transform 와 같이 느린 것입니다. .

    <시간>

    성능

    작은

    100 loops, best of 3: 2.04 ms per loop  # applymap 
    100 loops, best of 3: 2.69 ms per loop  # transform
    1000 loops, best of 3: 1.45 ms per loop  # looped str.replace
    
    

    대형 ( df * 10000 )

    1 loop, best of 3: 618 ms per loop  # applymap 
    1 loop, best of 3: 658 ms per loop  # transform
    1 loop, best of 3: 341 ms per loop  # looped str.replace
    1 loop, best of 3: 212 ms per loop  # df.replace
    
    

관련 자료

  • 이전 c# - ASPNET Core 2, jQuery POST 데이터 null
  • 다음 javascript - Sweet Alert 2에서 PHP variabe 전달