• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

질문드립니다!

20.07.14 13:01 작성 조회수 118

0

데이터 전처리 부분 코로나 예제를 실행중 궁금한사항이 몇가지 생겨서 질문드리게되었습니다. 일단 질문이 많아서 죄송합니다...ㅠ

<질문1>

1.

def country_name_convert(row):

    if row['Country_Region'] in json_data:

        return json_data[row['Country_Region']]

    return row['Country_Region'] # 바꿀변수값을 return값으로 보내므로 doc['Country_Region']에 저장해야됨

호출//////

doc['Country_Region'] = doc.apply(country_name_convert, axis=1)

doc.head()

2.

def country_name_convert(row):

    if row['Country_Region'] in json_data:

        row['Country_Region'] = json_data[row['Country_Region']]

    return row # row전체를 return하므로 doc변수에 저장

호출/////

doc = doc.apply(country_name_convert, axis=1)

doc.head()

두가지 경우가 같은식이 맞을까요? 하나씩 가져온 row전체를 return하는 경우도있고 바뀔값을 가져와서 호출시에 해당값으로 변경하는 경우도있는건가요?

<질문2>

중간에  doc = doc.astype({'Confirmed': 'int64'})

처리 해주었음에도 마지막에 MERGE한후

final_doc = final_doc.astype('int64')해주어야하는 이유

제가 하나씩 쳐보면서 해보았는데

final_doc = final_doc.fillna(0) 처리과정에서 0.0이 삽입되어서 처리해주어야하는건알겠는데

나머지 sum한 row들의 값이 소수점으로 예를들면 26874.0 같이 jupyter notebook화면에 나타나는 부분은 왜 그런지 이해가 되질 않습니다.ㅠㅠ 이미 위에서 정수처리를 한값을 sum했을뿐인데 float형식으로 왜 나오는지 궁금합니다.

<질문3>

PATH전역변수 선언 안하고 create_dateframe에서 사용될수있는이유가 무엇인가요? 보통 함수밖에서 지정한 field값은 함수내에서 전역변수처리를 해야지만 연동해서 사용할수있는것으로 알고있는데 아래코드와 같이 create_dateframe 함수에서는 매개변수로 PATH가 넘어오지도 않고 전역변수처리(GLOBE)를 하지도 않았는데 변수를 연동해서 어떻게 사용할수있는지가 궁금합니다.

def create_dateframe(filename):
doc = pd.read_csv(PATH + filename, encoding='utf-8-sig')
try:
doc = doc[['Country_Region', 'Confirmed']]

답변 1

답변을 작성해보세요.

0

1번은 동일합니다. 

2번은 fillna 로 값을 넣으면 0 이 아니라 0.0 이 들어가고, 0.0 과 같은 float 데이터가 하나라도 있으면 sum 할 때 전체가 float64 타입이 됩니다.

3번은 보통 전역변수에 값을 넣어 선언한 다음에, 함수 안에서 해당 변수를 실행하면 해당 변수가 함수 안에서 지역변수로 선언되지 않았다면, 전역변수라고 인지하고 전역변수 값을 가져옵니다.

ㅎㅎ 하루에 민선님 질문에 답변을 드리는데 들이는 시간이 갈수록 늘어나고 있는데... 다들 예리한 질문이긴 해요.