Pandas 엑셀파일읽고 데이터 컨트롤

2018. 10. 17. 10:43Python/pandas

엑셀파일을 제공받아 주어진 엑셀파일을 읽어보았다


from pandas import Series


import numpy as np

# Reading abalone data set
pd.set_option('display.float_format', None)
co = pd.read_excel("D:\Project\myProject\python\pandas\CO.xlsx",
sheet_name='Sheet1')

co = pd.read_excel("D:\Project\myProject\python\pandas\CO.xlsx",
sheet_name='Sheet1') 와같이 쓰고 sheet_name 을 해당 시트에 맞게 입력해주면 데이터가 들어온다.

       주민번호 앞자리 남여구분        상담일자  위기도단계  ...  건강보험료체납여부 경제적어려움       주거형태  주거유형

0        650705   여성  20170807.0    NaN  ...        NaN    값없음        값없음   값없음

1        830707   여성  20170911.0    4.0  ...          N  기본생계비  다가구(단독주택)    월세

2        900503   여성  20170831.0    NaN  ...        NaN    값없음        값없음   값없음


...         ...  ...         ...    ...  ...        ...    ...        ...   ...


64996    760338   여성  20171213.0    NaN  ...        NaN    값없음        값없음   값없음

64997    760338   여성  20180102.0    3.0  ...        NaN    값없음        값없음   값없음

64998    870435   여성  20180302.0    3.0  ...        NaN    값없음        값없음   값없음


[64999 rows x 14 columns]



아직 분석을 진행하진 않지만 분석을 하기위해 데이터 정리를 하는걸 익혀볼려고 숫자가들어있는 남여구분과 월소득액만 출력할려한다.


# 필요한열만가지고옴#
co2 = co[ ["주민번호 앞자리","남여구분","월소득액"] ]
print(co2)

주민번호 앞자리 남여구분 월소득액 0 650705 여성 NaN 1 830707 여성 1000000.0 2 900503 여성 NaN 3 900503 여성 NaN 4 530314 여성 NaN 5 530314 여성 NaN 6 830815 여성 NaN 7 160730 여성 NaN 8 530313 여성 NaN 9 510839 남성 NaN 10 530305 남성 NaN 11 530305 남성 NaN ... ... ... ... 64996 760338 여성 NaN 64997 760338 여성 NaN 64998 870435 여성 NaN [64999 rows x 3 columns]

그런데 출력하고보니 NaN 이란 값이 거슬린다.

저것만 빼줄수 없을까 하고 찾아보니 dropna() 란 함수가 존재하여서 사용해보았다.

## 월소득액이 nan 인거 제거
co2 = co2.dropna()

주민번호 앞자리 남여구분 월소득액 1 830707 여성 1000000.0 25 530804 남성 1430000.0 26 530804 남성 1430000.0 27 530804 남성 1430000.0 ... ... ... ... 64885 790618 여성 130.0 64897 170706 여성 5000000.0 64929 350408 여성 204010.0 64932 380818 여성 400000.0 64940 511113 여성 1400000.0 64941 530930 여성 0.0 [5678 rows x 3 columns]


Nan 이 제거되서 rows가 적어진걸 확인하엿다.


그런데 다시 130.0 이란 숫자가 눈에 띈다 130만원을 의미하는것같은데 다른것과 포맷이 맞지 않다.

비슷한 데이터가 꽤 여러건 있는것을 발견하고 변경할수있나 확인을 위해 * 1000을 해줘보았다.

co2["월소득액"] = co2["월소득액"] * 10000
print(co2)

       주민번호 앞자리 남여구분          월소득액

1        830707   여성  1.000000e+10

25       530804   남성  1.430000e+10

26       530804   남성  1.430000e+10

27       530804   남성  1.430000e+10

52       541116   남성  6.958800e+09


...         ...  ...           ...


64897    170706   여성  5.000000e+10

64929    350408   여성  2.040100e+09

64932    380818   여성  4.000000e+09

64940    511113   여성  1.400000e+10

64941    530930   여성  0.000000e+00


[5678 rows x 3 columns]


값은 변경된것 같았지만 출력이 이상하게 나온다.... 왠지 float 형식이라 그럴거라고 예상하고 

dataFrame의 타입이 존재하는지, 볼수있는지를 찾아보니 



print(co2.dtypes)


위과 같이 사용하면 볼수있단걸알았다.


주민번호 앞자리      int64

남여구분         object

월소득액        float64

dtype: object



란 결과가 나오고 예상되로 float64 형식이여서 다시 type을 바꿀방법을찾았다.

co2["월소득액"] =  co2["월소득액"].astype(int)

       주민번호 앞자리 남여구분        월소득액

1        830707   여성  1410065408

25       530804   남성  1415098112

26       530804   남성  1415098112


...         ...  ...         ...


64897    170706   여성 -1539607552

64929    350408   여성  2040100000

64932    380818   여성  -294967296

64940    511113   여성  1115098112

64941    530930   여성           0


값이 제대로 출력 되는걸 확인했고 이제 모두 10000을 곱하는걸 방지하기 위해 

포맷에 맞게 월소득액 < 10000 인 수만 10000을 곱해줘야한다.


co2.loc[(co2["월소득액"] < 10000) & (co2["월소득액"] > 0)  , ["월소득액"]] = co2.loc[(co2["월소득액"] < 10000) & (co2["월소득액"] > 0) , ["월소득액"]] * 10000

열심히 검색하고 시도해본결과 위와 같이 사용하면 된다는걸 알았다.

co2.loc를 이용해 조건검색을하고  [   , ["월소득액"] 이라고하면 특정 컬럼의 데이터만 선택한다.

 


  주민번호 앞자리 남여구분     월소득액

1        830707   여성  1000000

25       530804   남성  1430000

26       530804   남성  1430000

27       530804   남성  1430000

52       541116   남성   695880

53       541116   남성   695880


...         ...  ...      ...


64822    400133   여성   100000

64823    400133   여성   100000

64824    400133   여성   100000

64827    581031   남성   674480

64834    350709   여성   500000

64875    161119   여성  3000000

64885    790618   여성  1300000

64897    170706   여성  5000000

64929    350408   여성   204010

64932    380818   여성   400000

64940    511113   여성  1400000

64941    530930   여성        0


[5678 rows x 3 columns]


드디어 원하는 데이터를 출력하였다.


 이제 이 데이터를 이용해서 무언가를 분석할수있을까???  

 데이터를 분석할려면 무얼해야할까??

 어디서부터 시작해야되는지 감이 안잡힌다. 

 일단 데이터를 이용해서 무언가 처리를 하기위해  여성과 남성으로 구분후 나이와 월소득액의 평균을 구해보자


sex_group  = co2.groupby(co2['남여구분']).mean()
sex_group["월소득액"] = sex_group["월소득액"].astype(int)
print(sex_group)

groupby 함수를 해 집계를하고 mean() 으로 평균값을 뽑았다.

그랬더니 결과는

           주민번호 앞자리     월소득액

남여구분                        

남성    538573.833333  1043214

여성    513100.651208   867782



위와 같이 생각보다 이쁘게 나왔다. 


이를통해서 남성,여성의 평균나이와 월소득액 평균을 판별할 수 있다.


근데 문제는 이를통해 분석을 한다하면.... 어떻게 해야되는걸까???






반응형

'Python > pandas' 카테고리의 다른 글

Python pandas - 상관관계 분석 -2  (0) 2018.11.06
Python pandas - 상관관계 분석 -1  (0) 2018.11.06
Python Pandas 시작  (0) 2018.09.28