파이썬 pandas 콤마가 포함된 수치데이터를 to_numeric 으로 변환.

조회수 3417회

seoul_sgg_stat.xlsx
비밀번호:1234

파일은 블로그에 첨부했습니다

seoul_sgg_stat = pd.read_excel('seoul_sgg_stat.xlsx')
seoul_sgg_stat.head()
seoul_sgg_stat['주민등록인구']

이 문자형으로 되어있습니다.

['주민등록인구'] 열전체를 정수형으로 바꿀없나요? pd.to_numeric이런 함수를 사용해보았는데 안돼내요?

심지어 int(seoul_sgg_stat['주민등록인구'][0])실행하면

invalid literal for int() with base 10: '345,041'

이런 오류가 뜨네 그 이유좀 알려주세요 ^

  • 숫자가 아닌 문자 , 가 존재해서 그렇습니다. 정영훈 2020.3.17 12:11

1 답변

    1. , 를 제거하고 : df['주민등록인구'] = df['주민등록인구'].apply(lambda x: x.replace(',', ''))
    2. to_numeric
    Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license()" for more information.
    >>> import pandas as pd
    
    >>> df = pd.read_excel('c:/temp/seoul_sgg_stat.xlsx')
    >>> df
        시군구코드  시군구명         위도          경도  스타벅스_매장수   주민등록인구    종사자수   사업체수
    0   11320   도봉구  37.665861  127.031767         2  345,041   68669  18455
    1   11380   은평구  37.617612  126.922700         8  490,253   87693  24179
    2   11230  동대문구  37.583801  127.050700         8  364,962  143858  32994
    3   11590   동작구  37.496504  126.944307        10  406,715  103915  19609
    4   11545   금천구  37.460097  126.900155        10  253,344  223058  30080
    5   11530   구로구  37.495486  126.858121        10  440,396  210506  37445
    6   11110   종로구  37.599100  126.986149        36  164,348  269106  40871
    7   11305   강북구  37.646995  127.014716         5  327,511   69787  18654
    8   11260   중랑구  37.595379  127.093967         6  411,552   99241  27287
    9   11680   강남구  37.495985  127.066409        77  557,865  711278  73590
    10  11500   강서구  37.565762  126.822656        15  608,361  199289  33273
    11  11140    중구  37.557945  126.994190        52  135,139  423808  66190
    12  11740   강동구  37.549208  127.146482        13  438,225  143061  30079
    13  11215   광진구  37.548144  127.085753        15  371,671  123689  24531
    14  11440   마포구  37.562291  126.908780        32  385,624  252534  36504
    15  11650   서초구  37.476953  127.037810        46  445,164  439963  47061
    16  11290   성북구  37.606991  127.023218        13  453,902  113893  24690
    17  11350   노원구  37.655264  127.077120        13  555,803  114736  25827
    18  11710   송파구  37.504853  127.114482        29  671,994  302517  45375
    19  11410  서대문구  37.582037  126.935666        20  324,871  111615  19612
    20  11470   양천구  37.527062  126.856153        15  473,087  119443  26297
    21  11560  영등포구  37.520641  126.913924        35  403,988  362524  44512
    22  11620   관악구  37.465399  126.943807        11  522,292  119180  26235
    23  11200   성동구  37.550675  127.040962        11  314,551  162019  26130
    24  11170   용산구  37.531101  126.981074        18  245,411  133446  21178
    >>> df.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 25 entries, 0 to 24
    Data columns (total 8 columns):
     #   Column    Non-Null Count  Dtype  
    ---  ------    --------------  -----  
     0   시군구코드     25 non-null     int64  
     1   시군구명      25 non-null     object 
     2   위도        25 non-null     float64
     3   경도        25 non-null     float64
     4   스타벅스_매장수  25 non-null     int64  
     5   주민등록인구    25 non-null     object 
     6   종사자수      25 non-null     int64  
     7   사업체수      25 non-null     int64  
    dtypes: float64(2), int64(4), object(2)
    memory usage: 1.7+ KB
    >>> df['주민등록인구'] = df['주민등록인구'].apply(lambda x: x.replace(',', ''))
    >>> df
        시군구코드  시군구명         위도          경도  스타벅스_매장수  주민등록인구    종사자수   사업체수
    0   11320   도봉구  37.665861  127.031767         2  345041   68669  18455
    1   11380   은평구  37.617612  126.922700         8  490253   87693  24179
    2   11230  동대문구  37.583801  127.050700         8  364962  143858  32994
    3   11590   동작구  37.496504  126.944307        10  406715  103915  19609
    4   11545   금천구  37.460097  126.900155        10  253344  223058  30080
    5   11530   구로구  37.495486  126.858121        10  440396  210506  37445
    6   11110   종로구  37.599100  126.986149        36  164348  269106  40871
    7   11305   강북구  37.646995  127.014716         5  327511   69787  18654
    8   11260   중랑구  37.595379  127.093967         6  411552   99241  27287
    9   11680   강남구  37.495985  127.066409        77  557865  711278  73590
    10  11500   강서구  37.565762  126.822656        15  608361  199289  33273
    11  11140    중구  37.557945  126.994190        52  135139  423808  66190
    12  11740   강동구  37.549208  127.146482        13  438225  143061  30079
    13  11215   광진구  37.548144  127.085753        15  371671  123689  24531
    14  11440   마포구  37.562291  126.908780        32  385624  252534  36504
    15  11650   서초구  37.476953  127.037810        46  445164  439963  47061
    16  11290   성북구  37.606991  127.023218        13  453902  113893  24690
    17  11350   노원구  37.655264  127.077120        13  555803  114736  25827
    18  11710   송파구  37.504853  127.114482        29  671994  302517  45375
    19  11410  서대문구  37.582037  126.935666        20  324871  111615  19612
    20  11470   양천구  37.527062  126.856153        15  473087  119443  26297
    21  11560  영등포구  37.520641  126.913924        35  403988  362524  44512
    22  11620   관악구  37.465399  126.943807        11  522292  119180  26235
    23  11200   성동구  37.550675  127.040962        11  314551  162019  26130
    24  11170   용산구  37.531101  126.981074        18  245411  133446  21178
    >>> df.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 25 entries, 0 to 24
    Data columns (total 8 columns):
     #   Column    Non-Null Count  Dtype  
    ---  ------    --------------  -----  
     0   시군구코드     25 non-null     int64  
     1   시군구명      25 non-null     object 
     2   위도        25 non-null     float64
     3   경도        25 non-null     float64
     4   스타벅스_매장수  25 non-null     int64  
     5   주민등록인구    25 non-null     object 
     6   종사자수      25 non-null     int64  
     7   사업체수      25 non-null     int64  
    dtypes: float64(2), int64(4), object(2)
    memory usage: 1.7+ KB
    >>> df['주민등록인구'] = pd.to_numeric(df['주민등록인구'])
    >>> df
        시군구코드  시군구명         위도          경도  스타벅스_매장수  주민등록인구    종사자수   사업체수
    0   11320   도봉구  37.665861  127.031767         2  345041   68669  18455
    1   11380   은평구  37.617612  126.922700         8  490253   87693  24179
    2   11230  동대문구  37.583801  127.050700         8  364962  143858  32994
    3   11590   동작구  37.496504  126.944307        10  406715  103915  19609
    4   11545   금천구  37.460097  126.900155        10  253344  223058  30080
    5   11530   구로구  37.495486  126.858121        10  440396  210506  37445
    6   11110   종로구  37.599100  126.986149        36  164348  269106  40871
    7   11305   강북구  37.646995  127.014716         5  327511   69787  18654
    8   11260   중랑구  37.595379  127.093967         6  411552   99241  27287
    9   11680   강남구  37.495985  127.066409        77  557865  711278  73590
    10  11500   강서구  37.565762  126.822656        15  608361  199289  33273
    11  11140    중구  37.557945  126.994190        52  135139  423808  66190
    12  11740   강동구  37.549208  127.146482        13  438225  143061  30079
    13  11215   광진구  37.548144  127.085753        15  371671  123689  24531
    14  11440   마포구  37.562291  126.908780        32  385624  252534  36504
    15  11650   서초구  37.476953  127.037810        46  445164  439963  47061
    16  11290   성북구  37.606991  127.023218        13  453902  113893  24690
    17  11350   노원구  37.655264  127.077120        13  555803  114736  25827
    18  11710   송파구  37.504853  127.114482        29  671994  302517  45375
    19  11410  서대문구  37.582037  126.935666        20  324871  111615  19612
    20  11470   양천구  37.527062  126.856153        15  473087  119443  26297
    21  11560  영등포구  37.520641  126.913924        35  403988  362524  44512
    22  11620   관악구  37.465399  126.943807        11  522292  119180  26235
    23  11200   성동구  37.550675  127.040962        11  314551  162019  26130
    24  11170   용산구  37.531101  126.981074        18  245411  133446  21178
    >>> df.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 25 entries, 0 to 24
    Data columns (total 8 columns):
     #   Column    Non-Null Count  Dtype  
    ---  ------    --------------  -----  
     0   시군구코드     25 non-null     int64  
     1   시군구명      25 non-null     object 
     2   위도        25 non-null     float64
     3   경도        25 non-null     float64
     4   스타벅스_매장수  25 non-null     int64  
     5   주민등록인구    25 non-null     int64  
     6   종사자수      25 non-null     int64  
     7   사업체수      25 non-null     int64  
    dtypes: float64(2), int64(5), object(1)
    memory usage: 1.7+ KB
    >>> 
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)